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:
Junio C Hamano
2009-11-17 08:59:27 -08:00
8 changed files with 546 additions and 66 deletions

View File

@ -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

View File

@ -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};
} }

View File

@ -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

View File

@ -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
View 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

View File

@ -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 ]
" "

View File

@ -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 ../..

View File

@ -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