Merge git://git.bogomips.org/git-svn
* git://git.bogomips.org/git-svn: Document git-svn's first-parent rule git svn: attempt to create empty dirs on clone+rebase git svn: add authorsfile test case for ~/.gitconfig git svn: read global+system config for clone+init git svn: handle SVN merges from revisions past the tip of the branch
This commit is contained in:
@ -320,6 +320,13 @@ Any other arguments are passed directly to 'git log'
|
|||||||
directories. The output is suitable for appending to
|
directories. The output is suitable for appending to
|
||||||
the $GIT_DIR/info/exclude file.
|
the $GIT_DIR/info/exclude file.
|
||||||
|
|
||||||
|
'mkdirs'::
|
||||||
|
Attempts to recreate empty directories that core git cannot track
|
||||||
|
based on information in $GIT_DIR/svn/<refname>/unhandled.log files.
|
||||||
|
Empty directories are automatically recreated when using
|
||||||
|
"git svn clone" and "git svn rebase", so "mkdirs" is intended
|
||||||
|
for use after commands like "git checkout" or "git reset".
|
||||||
|
|
||||||
'commit-diff'::
|
'commit-diff'::
|
||||||
Commits the diff of two tree-ish arguments from the
|
Commits the diff of two tree-ish arguments from the
|
||||||
command-line. This command does not rely on being inside an `git svn
|
command-line. This command does not rely on being inside an `git svn
|
||||||
@ -735,6 +742,16 @@ merges you've made. Furthermore, if you merge or pull from a git branch
|
|||||||
that is a mirror of an SVN branch, 'dcommit' may commit to the wrong
|
that is a mirror of an SVN branch, 'dcommit' may commit to the wrong
|
||||||
branch.
|
branch.
|
||||||
|
|
||||||
|
If you do merge, note the following rule: 'git svn dcommit' will
|
||||||
|
attempt to commit on top of the SVN commit named in
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
git log --grep=^git-svn-id: --first-parent -1
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
You 'must' therefore ensure that the most recent commit of the branch
|
||||||
|
you want to dcommit to is the 'first' parent of the merge. Chaos will
|
||||||
|
ensue otherwise, especially if the first parent is an older commit on
|
||||||
|
the same SVN branch.
|
||||||
|
|
||||||
'git clone' does not clone branches under the refs/remotes/ hierarchy or
|
'git clone' does not clone branches under the refs/remotes/ hierarchy or
|
||||||
any 'git svn' metadata, or config. So repositories created and managed with
|
any 'git svn' metadata, or config. So repositories created and managed with
|
||||||
using 'git svn' should use 'rsync' for cloning, if cloning is to be done
|
using 'git svn' should use 'rsync' for cloning, if cloning is to be done
|
||||||
|
57
git-svn.perl
57
git-svn.perl
@ -168,6 +168,9 @@ my %cmd = (
|
|||||||
'Create a .gitignore per svn:ignore',
|
'Create a .gitignore per svn:ignore',
|
||||||
{ 'revision|r=i' => \$_revision
|
{ 'revision|r=i' => \$_revision
|
||||||
} ],
|
} ],
|
||||||
|
'mkdirs' => [ \&cmd_mkdirs ,
|
||||||
|
"recreate empty directories after a checkout",
|
||||||
|
{ 'revision|r=i' => \$_revision } ],
|
||||||
'propget' => [ \&cmd_propget,
|
'propget' => [ \&cmd_propget,
|
||||||
'Print the value of a property on a file or directory',
|
'Print the value of a property on a file or directory',
|
||||||
{ 'revision|r=i' => \$_revision } ],
|
{ 'revision|r=i' => \$_revision } ],
|
||||||
@ -274,7 +277,7 @@ unless ($cmd && $cmd =~ /(?:clone|init|multi-init)$/) {
|
|||||||
|
|
||||||
my %opts = %{$cmd{$cmd}->[2]} if (defined $cmd);
|
my %opts = %{$cmd{$cmd}->[2]} if (defined $cmd);
|
||||||
|
|
||||||
read_repo_config(\%opts);
|
read_git_config(\%opts);
|
||||||
if ($cmd && ($cmd eq 'log' || $cmd eq 'blame')) {
|
if ($cmd && ($cmd eq 'log' || $cmd eq 'blame')) {
|
||||||
Getopt::Long::Configure('pass_through');
|
Getopt::Long::Configure('pass_through');
|
||||||
}
|
}
|
||||||
@ -769,6 +772,7 @@ sub cmd_rebase {
|
|||||||
$_fetch_all ? $gs->fetch_all : $gs->fetch;
|
$_fetch_all ? $gs->fetch_all : $gs->fetch;
|
||||||
}
|
}
|
||||||
command_noisy(rebase_cmd(), $gs->refname);
|
command_noisy(rebase_cmd(), $gs->refname);
|
||||||
|
$gs->mkemptydirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub cmd_show_ignore {
|
sub cmd_show_ignore {
|
||||||
@ -830,6 +834,12 @@ sub cmd_create_ignore {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub cmd_mkdirs {
|
||||||
|
my ($url, $rev, $uuid, $gs) = working_head_info('HEAD');
|
||||||
|
$gs ||= Git::SVN->new;
|
||||||
|
$gs->mkemptydirs($_revision);
|
||||||
|
}
|
||||||
|
|
||||||
sub canonicalize_path {
|
sub canonicalize_path {
|
||||||
my ($path) = @_;
|
my ($path) = @_;
|
||||||
my $dot_slash_added = 0;
|
my $dot_slash_added = 0;
|
||||||
@ -1196,6 +1206,7 @@ sub post_fetch_checkout {
|
|||||||
command_noisy(qw/read-tree -m -u -v HEAD HEAD/);
|
command_noisy(qw/read-tree -m -u -v HEAD HEAD/);
|
||||||
print STDERR "Checked out HEAD:\n ",
|
print STDERR "Checked out HEAD:\n ",
|
||||||
$gs->full_url, " r", $gs->last_rev, "\n";
|
$gs->full_url, " r", $gs->last_rev, "\n";
|
||||||
|
$gs->mkemptydirs($gs->last_rev);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub complete_svn_url {
|
sub complete_svn_url {
|
||||||
@ -1390,8 +1401,7 @@ sub load_authors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# convert GetOpt::Long specs for use by git-config
|
# convert GetOpt::Long specs for use by git-config
|
||||||
sub read_repo_config {
|
sub read_git_config {
|
||||||
return unless -d $ENV{GIT_DIR};
|
|
||||||
my $opts = shift;
|
my $opts = shift;
|
||||||
my @config_only;
|
my @config_only;
|
||||||
foreach my $o (keys %$opts) {
|
foreach my $o (keys %$opts) {
|
||||||
@ -2725,6 +2735,34 @@ sub do_fetch {
|
|||||||
$self->make_log_entry($rev, \@parents, $ed);
|
$self->make_log_entry($rev, \@parents, $ed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub mkemptydirs {
|
||||||
|
my ($self, $r) = @_;
|
||||||
|
my %empty_dirs = ();
|
||||||
|
|
||||||
|
open my $fh, '<', "$self->{dir}/unhandled.log" or return;
|
||||||
|
binmode $fh or croak "binmode: $!";
|
||||||
|
while (<$fh>) {
|
||||||
|
if (defined $r && /^r(\d+)$/) {
|
||||||
|
last if $1 > $r;
|
||||||
|
} elsif (/^ \+empty_dir: (.+)$/) {
|
||||||
|
$empty_dirs{$1} = 1;
|
||||||
|
} elsif (/^ \-empty_dir: (.+)$/) {
|
||||||
|
delete $empty_dirs{$1};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close $fh;
|
||||||
|
foreach my $d (sort keys %empty_dirs) {
|
||||||
|
$d = uri_decode($d);
|
||||||
|
next if -d $d;
|
||||||
|
if (-e _) {
|
||||||
|
warn "$d exists but is not a directory\n";
|
||||||
|
} else {
|
||||||
|
print "creating empty directory: $d\n";
|
||||||
|
mkpath([$d]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub get_untracked {
|
sub get_untracked {
|
||||||
my ($self, $ed) = @_;
|
my ($self, $ed) = @_;
|
||||||
my @out;
|
my @out;
|
||||||
@ -2950,8 +2988,11 @@ sub find_extra_svn_parents {
|
|||||||
my $bottom_commit =
|
my $bottom_commit =
|
||||||
$gs->rev_map_get($bottom, $self->ra_uuid) ||
|
$gs->rev_map_get($bottom, $self->ra_uuid) ||
|
||||||
$gs->rev_map_get($bottom+1, $self->ra_uuid);
|
$gs->rev_map_get($bottom+1, $self->ra_uuid);
|
||||||
my $top_commit =
|
my $top_commit;
|
||||||
$gs->rev_map_get($top, $self->ra_uuid);
|
for (; !$top_commit && $top >= $bottom; --$top) {
|
||||||
|
$top_commit =
|
||||||
|
$gs->rev_map_get($top, $self->ra_uuid);
|
||||||
|
}
|
||||||
|
|
||||||
unless ($top_commit and $bottom_commit) {
|
unless ($top_commit and $bottom_commit) {
|
||||||
warn "W:unknown path/rev in svn:mergeinfo "
|
warn "W:unknown path/rev in svn:mergeinfo "
|
||||||
@ -3554,6 +3595,12 @@ sub uri_encode {
|
|||||||
$f
|
$f
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub uri_decode {
|
||||||
|
my ($f) = @_;
|
||||||
|
$f =~ s#%([0-9a-fA-F]{2})#chr(hex($1))#eg;
|
||||||
|
$f
|
||||||
|
}
|
||||||
|
|
||||||
sub remove_username {
|
sub remove_username {
|
||||||
$_[0] =~ s{^([^:]*://)[^@]+@}{$1};
|
$_[0] =~ s{^([^:]*://)[^@]+@}{$1};
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ test_expect_success 'init and fetch repository' '
|
|||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'create file in existing ugly and empty dir' '
|
test_expect_success 'create file in existing ugly and empty dir' '
|
||||||
mkdir "#{bad_directory_name}" &&
|
mkdir -p "#{bad_directory_name}" &&
|
||||||
echo hi > "#{bad_directory_name}/ foo" &&
|
echo hi > "#{bad_directory_name}/ foo" &&
|
||||||
git update-index --add "#{bad_directory_name}/ foo" &&
|
git update-index --add "#{bad_directory_name}/ foo" &&
|
||||||
git commit -m "new file in ugly parent" &&
|
git commit -m "new file in ugly parent" &&
|
||||||
@ -37,7 +37,7 @@ test_expect_success 'rename pretty file' '
|
|||||||
git update-index --add pretty &&
|
git update-index --add pretty &&
|
||||||
git commit -m "pretty :x" &&
|
git commit -m "pretty :x" &&
|
||||||
git svn dcommit &&
|
git svn dcommit &&
|
||||||
mkdir regular_dir_name &&
|
mkdir -p regular_dir_name &&
|
||||||
git mv pretty regular_dir_name/pretty &&
|
git mv pretty regular_dir_name/pretty &&
|
||||||
git commit -m "moved pretty file" &&
|
git commit -m "moved pretty file" &&
|
||||||
git svn dcommit
|
git svn dcommit
|
||||||
|
@ -91,4 +91,27 @@ test_expect_success 'fetch continues after authors-file is fixed' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'fresh clone with svn.authors-file in config' '
|
||||||
|
(
|
||||||
|
rm -r "$GIT_DIR" &&
|
||||||
|
test x = x"$(git config svn.authorsfile)" &&
|
||||||
|
HOME="`pwd`" &&
|
||||||
|
export HOME &&
|
||||||
|
test_config="$HOME"/.gitconfig &&
|
||||||
|
unset GIT_CONFIG_NOGLOBAL &&
|
||||||
|
unset GIT_DIR &&
|
||||||
|
unset GIT_CONFIG &&
|
||||||
|
git config --global \
|
||||||
|
svn.authorsfile "$HOME"/svn-authors &&
|
||||||
|
test x"$HOME"/svn-authors = x"$(git config svn.authorsfile)" &&
|
||||||
|
git svn clone "$svnrepo" gitconfig.clone &&
|
||||||
|
cd gitconfig.clone &&
|
||||||
|
nr_ex=$(git log | grep "^Author:.*example.com" | wc -l) &&
|
||||||
|
nr_rev=$(git rev-list HEAD | wc -l) &&
|
||||||
|
test $nr_rev -eq $nr_ex
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_debug 'GIT_DIR=gitconfig.clone/.git git log'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
85
t/t9146-git-svn-empty-dirs.sh
Executable file
85
t/t9146-git-svn-empty-dirs.sh
Executable file
@ -0,0 +1,85 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2009 Eric Wong
|
||||||
|
|
||||||
|
test_description='git svn creates empty directories'
|
||||||
|
. ./lib-git-svn.sh
|
||||||
|
|
||||||
|
test_expect_success 'initialize repo' '
|
||||||
|
for i in a b c d d/e d/e/f "weird file name"
|
||||||
|
do
|
||||||
|
svn_cmd mkdir -m "mkdir $i" "$svnrepo"/"$i"
|
||||||
|
done
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'clone' 'git svn clone "$svnrepo" cloned'
|
||||||
|
|
||||||
|
test_expect_success 'empty directories exist' '
|
||||||
|
(
|
||||||
|
cd cloned &&
|
||||||
|
for i in a b c d d/e d/e/f "weird file name"
|
||||||
|
do
|
||||||
|
if ! test -d "$i"
|
||||||
|
then
|
||||||
|
echo >&2 "$i does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'more emptiness' '
|
||||||
|
svn_cmd mkdir -m "bang bang" "$svnrepo"/"! !"
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git svn rebase creates empty directory' '
|
||||||
|
( cd cloned && git svn rebase )
|
||||||
|
test -d cloned/"! !"
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git svn mkdirs recreates empty directories' '
|
||||||
|
(
|
||||||
|
cd cloned &&
|
||||||
|
rm -r * &&
|
||||||
|
git svn mkdirs &&
|
||||||
|
for i in a b c d d/e d/e/f "weird file name" "! !"
|
||||||
|
do
|
||||||
|
if ! test -d "$i"
|
||||||
|
then
|
||||||
|
echo >&2 "$i does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git svn mkdirs -r works' '
|
||||||
|
(
|
||||||
|
cd cloned &&
|
||||||
|
rm -r * &&
|
||||||
|
git svn mkdirs -r7 &&
|
||||||
|
for i in a b c d d/e d/e/f "weird file name"
|
||||||
|
do
|
||||||
|
if ! test -d "$i"
|
||||||
|
then
|
||||||
|
echo >&2 "$i does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -d "! !"
|
||||||
|
then
|
||||||
|
echo >&2 "$i should not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
git svn mkdirs -r8 &&
|
||||||
|
if ! test -d "! !"
|
||||||
|
then
|
||||||
|
echo >&2 "$i not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
@ -15,7 +15,11 @@ test_expect_success 'load svn dump' "
|
|||||||
git svn fetch --all
|
git svn fetch --all
|
||||||
"
|
"
|
||||||
|
|
||||||
test_expect_success 'svn merges were represented coming in' "
|
test_expect_success 'represent svn merges without intervening commits' "
|
||||||
|
[ `git cat-file commit HEAD^1 | grep parent | wc -l` -eq 2 ]
|
||||||
|
"
|
||||||
|
|
||||||
|
test_expect_success 'represent svn merges with intervening commits' "
|
||||||
[ `git cat-file commit HEAD | grep parent | wc -l` -eq 2 ]
|
[ `git cat-file commit HEAD | grep parent | wc -l` -eq 2 ]
|
||||||
"
|
"
|
||||||
|
|
||||||
|
@ -28,6 +28,10 @@ svn cp trunk branches/left
|
|||||||
|
|
||||||
echo "Committing BRANCH POINT"
|
echo "Committing BRANCH POINT"
|
||||||
svn commit -m "make left branch"
|
svn commit -m "make left branch"
|
||||||
|
svn cp trunk branches/right
|
||||||
|
|
||||||
|
echo "Committing other BRANCH POINT"
|
||||||
|
svn commit -m "make right branch"
|
||||||
cd branches/left/
|
cd branches/left/
|
||||||
|
|
||||||
#$sm init
|
#$sm init
|
||||||
@ -64,7 +68,33 @@ git cat-file blob b51ad431:Makefile > Makefile
|
|||||||
|
|
||||||
svn resolved Makefile
|
svn resolved Makefile
|
||||||
|
|
||||||
svn commit -m "Merge trunk"
|
svn commit -m "Merge trunk 1"
|
||||||
|
|
||||||
|
# create commits on both branches
|
||||||
|
|
||||||
|
cd ../branches/left
|
||||||
|
git cat-file blob ff5ebe39:Makefile > Makefile
|
||||||
|
echo "Committing BRANCH UPDATE 4"
|
||||||
|
svn commit -m "left update 4"
|
||||||
|
|
||||||
|
cd ../right
|
||||||
|
git cat-file blob b5039db6:Makefile > Makefile
|
||||||
|
echo "Committing other BRANCH UPDATE 1"
|
||||||
|
svn commit -m "right update 1"
|
||||||
|
|
||||||
|
# merge to trun again
|
||||||
|
|
||||||
|
cd ../..
|
||||||
|
svn update
|
||||||
|
cd trunk
|
||||||
|
|
||||||
|
svn merge ../branches/left --accept postpone
|
||||||
|
|
||||||
|
git cat-file blob b51ad431:Makefile > Makefile
|
||||||
|
|
||||||
|
svn resolved Makefile
|
||||||
|
|
||||||
|
svn commit -m "Merge trunk 2"
|
||||||
|
|
||||||
cd ../..
|
cd ../..
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
SVN-fs-dump-format-version: 2
|
SVN-fs-dump-format-version: 2
|
||||||
|
|
||||||
UUID: 1ce241d1-ba54-4eb9-bded-03057fe48a33
|
UUID: 1530d5a2-a1dc-4438-8ad5-d95e96db8945
|
||||||
|
|
||||||
Revision-number: 0
|
Revision-number: 0
|
||||||
Prop-content-length: 56
|
Prop-content-length: 56
|
||||||
@ -9,12 +9,12 @@ Content-length: 56
|
|||||||
K 8
|
K 8
|
||||||
svn:date
|
svn:date
|
||||||
V 27
|
V 27
|
||||||
2009-10-20T01:33:37.692723Z
|
2009-11-12T20:29:38.812226Z
|
||||||
PROPS-END
|
PROPS-END
|
||||||
|
|
||||||
Revision-number: 1
|
Revision-number: 1
|
||||||
Prop-content-length: 123
|
Prop-content-length: 127
|
||||||
Content-length: 123
|
Content-length: 127
|
||||||
|
|
||||||
K 7
|
K 7
|
||||||
svn:log
|
svn:log
|
||||||
@ -22,12 +22,12 @@ V 24
|
|||||||
Setup trunk and branches
|
Setup trunk and branches
|
||||||
K 10
|
K 10
|
||||||
svn:author
|
svn:author
|
||||||
V 4
|
V 8
|
||||||
samv
|
tallsopp
|
||||||
K 8
|
K 8
|
||||||
svn:date
|
svn:date
|
||||||
V 27
|
V 27
|
||||||
2009-10-20T01:33:38.159933Z
|
2009-11-12T20:29:39.045856Z
|
||||||
PROPS-END
|
PROPS-END
|
||||||
|
|
||||||
Node-path: branches
|
Node-path: branches
|
||||||
@ -49,8 +49,8 @@ PROPS-END
|
|||||||
|
|
||||||
|
|
||||||
Revision-number: 2
|
Revision-number: 2
|
||||||
Prop-content-length: 106
|
Prop-content-length: 110
|
||||||
Content-length: 106
|
Content-length: 110
|
||||||
|
|
||||||
K 7
|
K 7
|
||||||
svn:log
|
svn:log
|
||||||
@ -58,12 +58,12 @@ V 8
|
|||||||
ancestor
|
ancestor
|
||||||
K 10
|
K 10
|
||||||
svn:author
|
svn:author
|
||||||
V 4
|
V 8
|
||||||
samv
|
tallsopp
|
||||||
K 8
|
K 8
|
||||||
svn:date
|
svn:date
|
||||||
V 27
|
V 27
|
||||||
2009-10-20T01:33:39.160059Z
|
2009-11-12T20:29:40.079587Z
|
||||||
PROPS-END
|
PROPS-END
|
||||||
|
|
||||||
Node-path: trunk/Makefile
|
Node-path: trunk/Makefile
|
||||||
@ -72,6 +72,7 @@ Node-action: add
|
|||||||
Prop-content-length: 10
|
Prop-content-length: 10
|
||||||
Text-content-length: 2401
|
Text-content-length: 2401
|
||||||
Text-content-md5: bfd8ff778d1492dc6758567373176a89
|
Text-content-md5: bfd8ff778d1492dc6758567373176a89
|
||||||
|
Text-content-sha1: 103205ce331f7d64086dba497574734f78439590
|
||||||
Content-length: 2411
|
Content-length: 2411
|
||||||
|
|
||||||
PROPS-END
|
PROPS-END
|
||||||
@ -155,8 +156,8 @@ backup: clean
|
|||||||
|
|
||||||
|
|
||||||
Revision-number: 3
|
Revision-number: 3
|
||||||
Prop-content-length: 115
|
Prop-content-length: 119
|
||||||
Content-length: 115
|
Content-length: 119
|
||||||
|
|
||||||
K 7
|
K 7
|
||||||
svn:log
|
svn:log
|
||||||
@ -164,12 +165,12 @@ V 16
|
|||||||
make left branch
|
make left branch
|
||||||
K 10
|
K 10
|
||||||
svn:author
|
svn:author
|
||||||
V 4
|
V 8
|
||||||
samv
|
tallsopp
|
||||||
K 8
|
K 8
|
||||||
svn:date
|
svn:date
|
||||||
V 27
|
V 27
|
||||||
2009-10-20T01:33:41.148192Z
|
2009-11-12T20:29:42.084439Z
|
||||||
PROPS-END
|
PROPS-END
|
||||||
|
|
||||||
Node-path: branches/left
|
Node-path: branches/left
|
||||||
@ -177,14 +178,6 @@ Node-kind: dir
|
|||||||
Node-action: add
|
Node-action: add
|
||||||
Node-copyfrom-rev: 1
|
Node-copyfrom-rev: 1
|
||||||
Node-copyfrom-path: trunk
|
Node-copyfrom-path: trunk
|
||||||
Prop-content-length: 34
|
|
||||||
Content-length: 34
|
|
||||||
|
|
||||||
K 13
|
|
||||||
svn:mergeinfo
|
|
||||||
V 0
|
|
||||||
|
|
||||||
PROPS-END
|
|
||||||
|
|
||||||
|
|
||||||
Node-path: branches/left/Makefile
|
Node-path: branches/left/Makefile
|
||||||
@ -193,11 +186,46 @@ Node-action: add
|
|||||||
Node-copyfrom-rev: 2
|
Node-copyfrom-rev: 2
|
||||||
Node-copyfrom-path: trunk/Makefile
|
Node-copyfrom-path: trunk/Makefile
|
||||||
Text-copy-source-md5: bfd8ff778d1492dc6758567373176a89
|
Text-copy-source-md5: bfd8ff778d1492dc6758567373176a89
|
||||||
|
Text-copy-source-sha1: 103205ce331f7d64086dba497574734f78439590
|
||||||
|
|
||||||
|
|
||||||
Revision-number: 4
|
Revision-number: 4
|
||||||
Prop-content-length: 112
|
Prop-content-length: 120
|
||||||
Content-length: 112
|
Content-length: 120
|
||||||
|
|
||||||
|
K 7
|
||||||
|
svn:log
|
||||||
|
V 17
|
||||||
|
make right branch
|
||||||
|
K 10
|
||||||
|
svn:author
|
||||||
|
V 8
|
||||||
|
tallsopp
|
||||||
|
K 8
|
||||||
|
svn:date
|
||||||
|
V 27
|
||||||
|
2009-11-12T20:29:44.065452Z
|
||||||
|
PROPS-END
|
||||||
|
|
||||||
|
Node-path: branches/right
|
||||||
|
Node-kind: dir
|
||||||
|
Node-action: add
|
||||||
|
Node-copyfrom-rev: 1
|
||||||
|
Node-copyfrom-path: trunk
|
||||||
|
|
||||||
|
|
||||||
|
Node-path: branches/right/Makefile
|
||||||
|
Node-kind: file
|
||||||
|
Node-action: add
|
||||||
|
Node-copyfrom-rev: 2
|
||||||
|
Node-copyfrom-path: trunk/Makefile
|
||||||
|
Text-copy-source-md5: bfd8ff778d1492dc6758567373176a89
|
||||||
|
Text-copy-source-sha1: 103205ce331f7d64086dba497574734f78439590
|
||||||
|
|
||||||
|
|
||||||
|
Revision-number: 5
|
||||||
|
Prop-content-length: 116
|
||||||
|
Content-length: 116
|
||||||
|
|
||||||
K 7
|
K 7
|
||||||
svn:log
|
svn:log
|
||||||
@ -205,12 +233,12 @@ V 13
|
|||||||
left update 1
|
left update 1
|
||||||
K 10
|
K 10
|
||||||
svn:author
|
svn:author
|
||||||
V 4
|
V 8
|
||||||
samv
|
tallsopp
|
||||||
K 8
|
K 8
|
||||||
svn:date
|
svn:date
|
||||||
V 27
|
V 27
|
||||||
2009-10-20T01:33:42.148773Z
|
2009-11-12T20:29:45.066262Z
|
||||||
PROPS-END
|
PROPS-END
|
||||||
|
|
||||||
Node-path: branches/left/Makefile
|
Node-path: branches/left/Makefile
|
||||||
@ -218,6 +246,7 @@ Node-kind: file
|
|||||||
Node-action: change
|
Node-action: change
|
||||||
Text-content-length: 2465
|
Text-content-length: 2465
|
||||||
Text-content-md5: 16e38d9753b061731650561ce01b1195
|
Text-content-md5: 16e38d9753b061731650561ce01b1195
|
||||||
|
Text-content-sha1: 36da4b84ea9b64218ab48171dfc5c48ae025f38b
|
||||||
Content-length: 2465
|
Content-length: 2465
|
||||||
|
|
||||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||||
@ -299,9 +328,9 @@ backup: clean
|
|||||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||||
|
|
||||||
|
|
||||||
Revision-number: 5
|
Revision-number: 6
|
||||||
Prop-content-length: 111
|
Prop-content-length: 115
|
||||||
Content-length: 111
|
Content-length: 115
|
||||||
|
|
||||||
K 7
|
K 7
|
||||||
svn:log
|
svn:log
|
||||||
@ -309,12 +338,12 @@ V 12
|
|||||||
trunk update
|
trunk update
|
||||||
K 10
|
K 10
|
||||||
svn:author
|
svn:author
|
||||||
V 4
|
V 8
|
||||||
samv
|
tallsopp
|
||||||
K 8
|
K 8
|
||||||
svn:date
|
svn:date
|
||||||
V 27
|
V 27
|
||||||
2009-10-20T01:33:43.159959Z
|
2009-11-12T20:29:46.278498Z
|
||||||
PROPS-END
|
PROPS-END
|
||||||
|
|
||||||
Node-path: trunk/Makefile
|
Node-path: trunk/Makefile
|
||||||
@ -322,6 +351,7 @@ Node-kind: file
|
|||||||
Node-action: change
|
Node-action: change
|
||||||
Text-content-length: 2521
|
Text-content-length: 2521
|
||||||
Text-content-md5: 0668418a621333f4aa8b6632cd63e2a0
|
Text-content-md5: 0668418a621333f4aa8b6632cd63e2a0
|
||||||
|
Text-content-sha1: 4f29afd038e52f45acb5ef8c41acfc70062a741a
|
||||||
Content-length: 2521
|
Content-length: 2521
|
||||||
|
|
||||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||||
@ -406,9 +436,9 @@ backup: clean
|
|||||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||||
|
|
||||||
|
|
||||||
Revision-number: 6
|
Revision-number: 7
|
||||||
Prop-content-length: 112
|
Prop-content-length: 116
|
||||||
Content-length: 112
|
Content-length: 116
|
||||||
|
|
||||||
K 7
|
K 7
|
||||||
svn:log
|
svn:log
|
||||||
@ -416,12 +446,12 @@ V 13
|
|||||||
left update 2
|
left update 2
|
||||||
K 10
|
K 10
|
||||||
svn:author
|
svn:author
|
||||||
V 4
|
V 8
|
||||||
samv
|
tallsopp
|
||||||
K 8
|
K 8
|
||||||
svn:date
|
svn:date
|
||||||
V 27
|
V 27
|
||||||
2009-10-20T01:33:44.164175Z
|
2009-11-12T20:29:47.069090Z
|
||||||
PROPS-END
|
PROPS-END
|
||||||
|
|
||||||
Node-path: branches/left/Makefile
|
Node-path: branches/left/Makefile
|
||||||
@ -429,6 +459,7 @@ Node-kind: file
|
|||||||
Node-action: change
|
Node-action: change
|
||||||
Text-content-length: 2529
|
Text-content-length: 2529
|
||||||
Text-content-md5: f6b197cc3f2e89a83e545d4bb003de73
|
Text-content-md5: f6b197cc3f2e89a83e545d4bb003de73
|
||||||
|
Text-content-sha1: 2f656677cfec0bceec85e53036ffb63e25126f8e
|
||||||
Content-length: 2529
|
Content-length: 2529
|
||||||
|
|
||||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||||
@ -510,9 +541,9 @@ backup: clean
|
|||||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||||
|
|
||||||
|
|
||||||
Revision-number: 7
|
Revision-number: 8
|
||||||
Prop-content-length: 112
|
Prop-content-length: 116
|
||||||
Content-length: 112
|
Content-length: 116
|
||||||
|
|
||||||
K 7
|
K 7
|
||||||
svn:log
|
svn:log
|
||||||
@ -520,12 +551,12 @@ V 13
|
|||||||
left update 3
|
left update 3
|
||||||
K 10
|
K 10
|
||||||
svn:author
|
svn:author
|
||||||
V 4
|
V 8
|
||||||
samv
|
tallsopp
|
||||||
K 8
|
K 8
|
||||||
svn:date
|
svn:date
|
||||||
V 27
|
V 27
|
||||||
2009-10-20T01:33:45.144214Z
|
2009-11-12T20:29:48.053835Z
|
||||||
PROPS-END
|
PROPS-END
|
||||||
|
|
||||||
Node-path: branches/left/Makefile
|
Node-path: branches/left/Makefile
|
||||||
@ -533,6 +564,7 @@ Node-kind: file
|
|||||||
Node-action: change
|
Node-action: change
|
||||||
Text-content-length: 2593
|
Text-content-length: 2593
|
||||||
Text-content-md5: 5ccff689fb290e00b85fe18ee50c54ba
|
Text-content-md5: 5ccff689fb290e00b85fe18ee50c54ba
|
||||||
|
Text-content-sha1: a13de8e23f1483efca3e57b2b64b0ae6f740ce10
|
||||||
Content-length: 2593
|
Content-length: 2593
|
||||||
|
|
||||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||||
@ -614,22 +646,22 @@ backup: clean
|
|||||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||||
|
|
||||||
|
|
||||||
Revision-number: 8
|
Revision-number: 9
|
||||||
Prop-content-length: 110
|
Prop-content-length: 116
|
||||||
Content-length: 110
|
Content-length: 116
|
||||||
|
|
||||||
K 7
|
K 7
|
||||||
svn:log
|
svn:log
|
||||||
V 11
|
V 13
|
||||||
Merge trunk
|
Merge trunk 1
|
||||||
K 10
|
K 10
|
||||||
svn:author
|
svn:author
|
||||||
V 4
|
V 8
|
||||||
samv
|
tallsopp
|
||||||
K 8
|
K 8
|
||||||
svn:date
|
svn:date
|
||||||
V 27
|
V 27
|
||||||
2009-10-20T01:33:48.176135Z
|
2009-11-12T20:29:51.098306Z
|
||||||
PROPS-END
|
PROPS-END
|
||||||
|
|
||||||
Node-path: trunk
|
Node-path: trunk
|
||||||
@ -641,7 +673,7 @@ Content-length: 53
|
|||||||
K 13
|
K 13
|
||||||
svn:mergeinfo
|
svn:mergeinfo
|
||||||
V 18
|
V 18
|
||||||
/branches/left:2-7
|
/branches/left:2-8
|
||||||
PROPS-END
|
PROPS-END
|
||||||
|
|
||||||
|
|
||||||
@ -650,6 +682,7 @@ Node-kind: file
|
|||||||
Node-action: change
|
Node-action: change
|
||||||
Text-content-length: 2713
|
Text-content-length: 2713
|
||||||
Text-content-md5: 0afbe34f244cd662b1f97d708c687f90
|
Text-content-md5: 0afbe34f244cd662b1f97d708c687f90
|
||||||
|
Text-content-sha1: 46d9377d783e67a9b581da110352e799517c8a14
|
||||||
Content-length: 2713
|
Content-length: 2713
|
||||||
|
|
||||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||||
@ -734,3 +767,244 @@ backup: clean
|
|||||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||||
|
|
||||||
|
|
||||||
|
Revision-number: 10
|
||||||
|
Prop-content-length: 116
|
||||||
|
Content-length: 116
|
||||||
|
|
||||||
|
K 7
|
||||||
|
svn:log
|
||||||
|
V 13
|
||||||
|
left update 4
|
||||||
|
K 10
|
||||||
|
svn:author
|
||||||
|
V 8
|
||||||
|
tallsopp
|
||||||
|
K 8
|
||||||
|
svn:date
|
||||||
|
V 27
|
||||||
|
2009-11-12T20:29:52.081644Z
|
||||||
|
PROPS-END
|
||||||
|
|
||||||
|
Node-path: branches/left/Makefile
|
||||||
|
Node-kind: file
|
||||||
|
Node-action: change
|
||||||
|
Text-content-length: 2529
|
||||||
|
Text-content-md5: f6b197cc3f2e89a83e545d4bb003de73
|
||||||
|
Text-content-sha1: 2f656677cfec0bceec85e53036ffb63e25126f8e
|
||||||
|
Content-length: 2529
|
||||||
|
|
||||||
|
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||||
|
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||||
|
# enough guarantees about no collisions between objects ever hapenning.
|
||||||
|
#
|
||||||
|
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||||
|
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||||
|
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||||
|
# break unless your underlying filesystem supports those sub-second times
|
||||||
|
# (my ext3 doesn't).
|
||||||
|
CFLAGS=-g -O3 -Wall
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
|
||||||
|
|
||||||
|
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||||
|
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||||
|
check-files ls-tree merge-base
|
||||||
|
|
||||||
|
all: $(PROG)
|
||||||
|
|
||||||
|
install: $(PROG)
|
||||||
|
install $(PROG) $(HOME)/bin/
|
||||||
|
|
||||||
|
LIBS= -lssl -lz
|
||||||
|
|
||||||
|
init-db: init-db.o
|
||||||
|
|
||||||
|
update-cache: update-cache.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
show-diff: show-diff.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
write-tree: write-tree.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
read-tree: read-tree.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
commit-tree: commit-tree.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
cat-file: cat-file.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
fsck-cache: fsck-cache.o read-cache.o object.o commit.o tree.o blob.o
|
||||||
|
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||||
|
|
||||||
|
checkout-cache: checkout-cache.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
diff-tree: diff-tree.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||||
|
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||||
|
|
||||||
|
show-files: show-files.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
check-files: check-files.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
ls-tree: ls-tree.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
merge-base: merge-base.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
read-cache.o: cache.h
|
||||||
|
show-diff.o: cache.h
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o $(PROG)
|
||||||
|
|
||||||
|
backup: clean
|
||||||
|
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||||
|
|
||||||
|
|
||||||
|
Revision-number: 11
|
||||||
|
Prop-content-length: 117
|
||||||
|
Content-length: 117
|
||||||
|
|
||||||
|
K 7
|
||||||
|
svn:log
|
||||||
|
V 14
|
||||||
|
right update 1
|
||||||
|
K 10
|
||||||
|
svn:author
|
||||||
|
V 8
|
||||||
|
tallsopp
|
||||||
|
K 8
|
||||||
|
svn:date
|
||||||
|
V 27
|
||||||
|
2009-11-12T20:29:53.059636Z
|
||||||
|
PROPS-END
|
||||||
|
|
||||||
|
Node-path: branches/right/Makefile
|
||||||
|
Node-kind: file
|
||||||
|
Node-action: change
|
||||||
|
Text-content-length: 2593
|
||||||
|
Text-content-md5: 5ccff689fb290e00b85fe18ee50c54ba
|
||||||
|
Text-content-sha1: a13de8e23f1483efca3e57b2b64b0ae6f740ce10
|
||||||
|
Content-length: 2593
|
||||||
|
|
||||||
|
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||||
|
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||||
|
# enough guarantees about no collisions between objects ever hapenning.
|
||||||
|
#
|
||||||
|
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||||
|
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||||
|
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||||
|
# break unless your underlying filesystem supports those sub-second times
|
||||||
|
# (my ext3 doesn't).
|
||||||
|
CFLAGS=-g -O3 -Wall
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
|
||||||
|
|
||||||
|
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||||
|
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||||
|
check-files ls-tree merge-base
|
||||||
|
|
||||||
|
all: $(PROG)
|
||||||
|
|
||||||
|
install: $(PROG)
|
||||||
|
install $(PROG) $(HOME)/bin/
|
||||||
|
|
||||||
|
LIBS= -lssl -lz
|
||||||
|
|
||||||
|
init-db: init-db.o
|
||||||
|
|
||||||
|
update-cache: update-cache.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
show-diff: show-diff.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
write-tree: write-tree.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
read-tree: read-tree.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
commit-tree: commit-tree.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
cat-file: cat-file.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
fsck-cache: fsck-cache.o read-cache.o object.o commit.o tree.o blob.o
|
||||||
|
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||||
|
|
||||||
|
checkout-cache: checkout-cache.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
diff-tree: diff-tree.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||||
|
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||||
|
|
||||||
|
show-files: show-files.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
check-files: check-files.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
ls-tree: ls-tree.o read-cache.o
|
||||||
|
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||||
|
|
||||||
|
merge-base: merge-base.o read-cache.o object.o commit.o tree.o blob.o
|
||||||
|
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||||
|
|
||||||
|
read-cache.o: cache.h
|
||||||
|
show-diff.o: cache.h
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o $(PROG)
|
||||||
|
|
||||||
|
backup: clean
|
||||||
|
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||||
|
|
||||||
|
|
||||||
|
Revision-number: 12
|
||||||
|
Prop-content-length: 116
|
||||||
|
Content-length: 116
|
||||||
|
|
||||||
|
K 7
|
||||||
|
svn:log
|
||||||
|
V 13
|
||||||
|
Merge trunk 2
|
||||||
|
K 10
|
||||||
|
svn:author
|
||||||
|
V 8
|
||||||
|
tallsopp
|
||||||
|
K 8
|
||||||
|
svn:date
|
||||||
|
V 27
|
||||||
|
2009-11-12T20:29:56.083003Z
|
||||||
|
PROPS-END
|
||||||
|
|
||||||
|
Node-path: trunk
|
||||||
|
Node-kind: dir
|
||||||
|
Node-action: change
|
||||||
|
Prop-content-length: 54
|
||||||
|
Content-length: 54
|
||||||
|
|
||||||
|
K 13
|
||||||
|
svn:mergeinfo
|
||||||
|
V 19
|
||||||
|
/branches/left:2-11
|
||||||
|
PROPS-END
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user