diff options
author | Junio C Hamano <junkio@cox.net> | 2006-03-01 17:42:30 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-03-01 17:42:30 -0800 |
commit | 3bddd7dbba2f178e7fab5916522bf398eb55ffc0 (patch) | |
tree | 8db130b214d0f1779eda0f9bdd77f7204abd0063 | |
parent | 1114b68f25d1d0a0a0a54406ab0cb3e154bdbad9 (diff) | |
parent | 2b74cffa9179eed274be2a38c59b7e323c813737 (diff) | |
download | git-3bddd7dbba2f178e7fab5916522bf398eb55ffc0.tar.gz |
Pull GIT 1.2.4 fixes from master
-rwxr-xr-x | git-mv.perl | 33 | ||||
-rw-r--r-- | pack-objects.c | 2 |
2 files changed, 25 insertions, 10 deletions
diff --git a/git-mv.perl b/git-mv.perl index 2ea852c918..fe9c40e1b9 100755 --- a/git-mv.perl +++ b/git-mv.perl @@ -19,25 +19,26 @@ EOT exit(1); } -my $GIT_DIR = `git rev-parse --git-dir`; -exit 1 if $?; # rev-parse would have given "not a git dir" message. -chomp($GIT_DIR); - our ($opt_n, $opt_f, $opt_h, $opt_k, $opt_v); getopts("hnfkv") || usage; usage() if $opt_h; @ARGV >= 1 or usage; +my $GIT_DIR = `git rev-parse --git-dir`; +exit 1 if $?; # rev-parse would have given "not a git dir" message. +chomp($GIT_DIR); + my (@srcArgs, @dstArgs, @srcs, @dsts); my ($src, $dst, $base, $dstDir); +# remove any trailing slash in arguments +for (@ARGV) { s/\/*$//; } + my $argCount = scalar @ARGV; if (-d $ARGV[$argCount-1]) { $dstDir = $ARGV[$argCount-1]; - # remove any trailing slash - $dstDir =~ s/\/$//; @srcArgs = @ARGV[0..$argCount-2]; - + foreach $src (@srcArgs) { $base = $src; $base =~ s/^.*\///; @@ -46,10 +47,14 @@ if (-d $ARGV[$argCount-1]) { } } else { - if ($argCount != 2) { + if ($argCount < 2) { + print "Error: need at least two arguments\n"; + exit(1); + } + if ($argCount > 2) { print "Error: moving to directory '" . $ARGV[$argCount-1] - . "' not possible; not exisiting\n"; + . "' not possible; not existing\n"; exit(1); } @srcArgs = ($ARGV[0]); @@ -57,6 +62,16 @@ else { $dstDir = ""; } +# normalize paths, needed to compare against versioned files and update-index +# also, this is nicer to end-users by doing ".//a/./b/.//./c" ==> "a/b/c" +for (@srcArgs, @dstArgs) { + s|^\./||; + s|/\./|/| while (m|/\./|); + s|//+|/|g; + # Also "a/b/../c" ==> "a/c" + 1 while (s,(^|/)[^/]+/\.\./,$1,); +} + my (@allfiles,@srcfiles,@dstfiles); my $safesrc; my (%overwritten, %srcForDst); diff --git a/pack-objects.c b/pack-objects.c index 21ee572f48..136a7f5aad 100644 --- a/pack-objects.c +++ b/pack-objects.c @@ -99,7 +99,7 @@ static int reused_delta = 0; static int pack_revindex_ix(struct packed_git *p) { - unsigned long ui = (unsigned long)(long)p; + unsigned long ui = (unsigned long)p; int i; ui = ui ^ (ui >> 16); /* defeat structure alignment */ |