Browse Source

Merge fixes up to GIT 1.2.2

maint
Junio C Hamano 19 years ago
parent
commit
709a9e5771
  1. 8
      Documentation/git-rev-parse.txt
  2. 28
      git-archimport.perl
  3. 4
      git-clone.sh
  4. 13
      git-cvsimport.perl
  5. 3
      git-reset.sh
  6. 6
      rev-parse.c
  7. 4
      sha1_file.c
  8. 63
      t/t7101-reset.sh
  9. 23
      t/test-lib.sh
  10. 3
      upload-pack.c

8
Documentation/git-rev-parse.txt

@ -77,6 +77,14 @@ OPTIONS
path of the top-level directory relative to the current path of the top-level directory relative to the current
directory (typically a sequence of "../", or an empty string). directory (typically a sequence of "../", or an empty string).


--git-dir::
Show `$GIT_DIR` if defined else show the path to the .git directory.

--short, short=number::
Instead of outputting the full SHA1 values of object names try to
abbriviate them to a shorter unique name. When no length is specified
7 is used. The minimum length is 4.

--since=datestring, --after=datestring:: --since=datestring, --after=datestring::
Parses the date string, and outputs corresponding Parses the date string, and outputs corresponding
--max-age= parameter for git-rev-list command. --max-age= parameter for git-rev-list command.

28
git-archimport.perl

@ -346,12 +346,10 @@ sub process_patchset_accurate {
} }
# update the index with all the changes we got # update the index with all the changes we got
system('git-diff-files --name-only -z | '.
'git-update-index --remove -z --stdin') == 0 or die "$! $?\n";
system('git-ls-files --others -z | '. system('git-ls-files --others -z | '.
'git-update-index --add -z --stdin') == 0 or die "$! $?\n"; 'git-update-index --add -z --stdin') == 0 or die "$! $?\n";
system('git-ls-files --deleted -z | '.
'git-update-index --remove -z --stdin') == 0 or die "$! $?\n";
system('git-ls-files -z | '.
'git-update-index -z --stdin') == 0 or die "$! $?\n";
return 1; return 1;
} }


@ -416,22 +414,14 @@ sub process_patchset_fast {
# imports don't give us good info # imports don't give us good info
# on added files. Shame on them # on added files. Shame on them
if ($ps->{type} eq 'i' || $ps->{type} eq 't') { if ($ps->{type} eq 'i' || $ps->{type} eq 't') {
system('git-ls-files --others -z | '.
'git-update-index --add -z --stdin') == 0 or die "$! $?\n";
system('git-ls-files --deleted -z | '. system('git-ls-files --deleted -z | '.
'git-update-index --remove -z --stdin') == 0 or die "$! $?\n"; 'git-update-index --remove -z --stdin') == 0 or die "$! $?\n";
system('git-ls-files --others -z | '.
'git-update-index --add -z --stdin') == 0 or die "$! $?\n";
} }


# TODO: handle removed_directories and renamed_directories: # TODO: handle removed_directories and renamed_directories:

if (my $add = $ps->{new_files}) {
while (@$add) {
my @slice = splice(@$add, 0, 100);
system('git-update-index','--add','--',@slice) == 0 or
die "Error in git-update-index --add: $! $?\n";
}
}
if (my $del = $ps->{removed_files}) { if (my $del = $ps->{removed_files}) {
unlink @$del; unlink @$del;
while (@$del) { while (@$del) {
@ -462,6 +452,14 @@ sub process_patchset_fast {
} }
} }


if (my $add = $ps->{new_files}) {
while (@$add) {
my @slice = splice(@$add, 0, 100);
system('git-update-index','--add','--',@slice) == 0 or
die "Error in git-update-index --add: $! $?\n";
}
}

if (my $mod = $ps->{modified_files}) { if (my $mod = $ps->{modified_files}) {
while (@$mod) { while (@$mod) {
my @slice = splice(@$mod, 0, 100); my @slice = splice(@$mod, 0, 100);

4
git-clone.sh

@ -118,6 +118,7 @@ dir="$2"
[ -e "$dir" ] && echo "$dir already exists." && usage [ -e "$dir" ] && echo "$dir already exists." && usage
mkdir -p "$dir" && mkdir -p "$dir" &&
D=$(cd "$dir" && pwd) && D=$(cd "$dir" && pwd) &&
trap 'err=$?; rm -r $D; exit $err' exit
case "$bare" in case "$bare" in
yes) GIT_DIR="$D" ;; yes) GIT_DIR="$D" ;;
*) GIT_DIR="$D/.git" ;; *) GIT_DIR="$D/.git" ;;
@ -255,3 +256,6 @@ Pull: $head_points_at:$origin" &&
git checkout git checkout
esac esac
fi fi

trap - exit


13
git-cvsimport.perl

@ -361,6 +361,7 @@ sub _line {
} }
} }
} }
return undef;
} }
sub file { sub file {
my($self,$fn,$rev) = @_; my($self,$fn,$rev) = @_;
@ -372,19 +373,15 @@ sub file {
$self->_file($fn,$rev) and $res = $self->_line($fh); $self->_file($fn,$rev) and $res = $self->_line($fh);


if (!defined $res) { if (!defined $res) {
# retry print STDERR "Server has gone away while fetching $fn $rev, retrying...\n";
truncate $fh, 0;
$self->conn(); $self->conn();
$self->_file($fn,$rev) $self->_file($fn,$rev) or die "No file command send";
or die "No file command send\n";
$res = $self->_line($fh); $res = $self->_line($fh);
die "No input: $fn $rev\n" unless defined $res; die "Retry failed" unless defined $res;
} }
close ($fh); close ($fh);


if ($res eq '') {
die "Looks like the server has gone away while fetching $fn $rev -- exiting!";
}

return ($name, $res); return ($name, $res);
} }



3
git-reset.sh

@ -88,6 +88,9 @@ case "$reset_type" in
# it is ok if this fails -- it may already # it is ok if this fails -- it may already
# have been culled by checkout-index. # have been culled by checkout-index.
unlink $_; unlink $_;
while (s|/[^/]*$||) {
rmdir($_) or last;
}
} }
} }
' $tmp-exists ' $tmp-exists

6
rev-parse.c

@ -226,12 +226,12 @@ int main(int argc, char **argv)
continue; continue;
} }
if (!strcmp(arg, "--short") || if (!strcmp(arg, "--short") ||
!strncmp(arg, "--short=", 9)) { !strncmp(arg, "--short=", 8)) {
filter &= ~(DO_FLAGS|DO_NOREV); filter &= ~(DO_FLAGS|DO_NOREV);
verify = 1; verify = 1;
abbrev = DEFAULT_ABBREV; abbrev = DEFAULT_ABBREV;
if (arg[8] == '=') if (arg[7] == '=')
abbrev = strtoul(arg + 9, NULL, 10); abbrev = strtoul(arg + 8, NULL, 10);
if (abbrev < MINIMUM_ABBREV) if (abbrev < MINIMUM_ABBREV)
abbrev = MINIMUM_ABBREV; abbrev = MINIMUM_ABBREV;
else if (40 <= abbrev) else if (40 <= abbrev)

4
sha1_file.c

@ -551,8 +551,10 @@ static void prepare_packed_git_one(char *objdir, int local)
sprintf(path, "%s/pack", objdir); sprintf(path, "%s/pack", objdir);
len = strlen(path); len = strlen(path);
dir = opendir(path); dir = opendir(path);
if (!dir) if (!dir) {
fprintf(stderr, "unable to open object pack directory: %s: %s\n", path, strerror(errno));
return; return;
}
path[len++] = '/'; path[len++] = '/';
while ((de = readdir(dir)) != NULL) { while ((de = readdir(dir)) != NULL) {
int namelen = strlen(de->d_name); int namelen = strlen(de->d_name);

63
t/t7101-reset.sh

@ -0,0 +1,63 @@
#!/bin/sh
#
# Copyright (c) 2006 Shawn Pearce
#

test_description='git-reset should cull empty subdirs'
. ./test-lib.sh

test_expect_success \
'creating initial files' \
'mkdir path0 &&
cp ../../COPYING path0/COPYING &&
git-add path0/COPYING &&
git-commit -m add -a'

test_expect_success \
'creating second files' \
'mkdir path1 &&
mkdir path1/path2 &&
cp ../../COPYING path1/path2/COPYING &&
cp ../../COPYING path1/COPYING &&
cp ../../COPYING COPYING &&
cp ../../COPYING path0/COPYING-TOO &&
git-add path1/path2/COPYING &&
git-add path1/COPYING &&
git-add COPYING &&
git-add path0/COPYING-TOO &&
git-commit -m change -a'

test_expect_success \
'resetting tree HEAD^' \
'git-reset --hard HEAD^'

test_expect_success \
'checking initial files exist after rewind' \
'test -d path0 &&
test -f path0/COPYING'

test_expect_failure \
'checking lack of path1/path2/COPYING' \
'test -f path1/path2/COPYING'

test_expect_failure \
'checking lack of path1/COPYING' \
'test -f path1/COPYING'

test_expect_failure \
'checking lack of COPYING' \
'test -f COPYING'

test_expect_failure \
'checking checking lack of path1/COPYING-TOO' \
'test -f path0/COPYING-TOO'

test_expect_failure \
'checking lack of path1/path2' \
'test -d path1/path2'

test_expect_failure \
'checking lack of path1' \
'test -d path1'

test_done

23
t/test-lib.sh

@ -149,6 +149,21 @@ test_expect_code () {
fi fi
} }


# Most tests can use the created repository, but some amy need to create more.
# Usage: test_create_repo <directory>
test_create_repo () {
test "$#" = 1 ||
error "bug in the test script: not 1 parameter to test-create-repo"
owd=`pwd`
repo="$1"
mkdir "$repo"
cd "$repo" || error "Cannot setup test environment"
"$GIT_EXEC_PATH/git" init-db --template=$GIT_EXEC_PATH/templates/blt/ 2>/dev/null ||
error "cannot run git init-db -- have you built things yet?"
mv .git/hooks .git/hooks-disabled
cd "$owd"
}
test_done () { test_done () {
trap - exit trap - exit
case "$test_failure" in case "$test_failure" in
@ -196,9 +211,5 @@ test -d ../templates/blt || {
# Test repository # Test repository
test=trash test=trash
rm -fr "$test" rm -fr "$test"
mkdir "$test" test_create_repo $test
cd "$test" || error "Cannot setup test environment" cd "$test"
"$GIT_EXEC_PATH/git" init-db --template=../../templates/blt/ 2>/dev/null ||
error "cannot run git init-db -- have you built things yet?"

mv .git/hooks .git/hooks-disabled

3
upload-pack.c

@ -216,6 +216,9 @@ static int send_ref(const char *refname, const unsigned char *sha1)
static char *capabilities = "multi_ack"; static char *capabilities = "multi_ack";
struct object *o = parse_object(sha1); struct object *o = parse_object(sha1);


if (!o)
die("git-upload-pack: cannot find object %s:", sha1_to_hex(sha1));

if (capabilities) if (capabilities)
packet_write(1, "%s %s%c%s\n", sha1_to_hex(sha1), refname, packet_write(1, "%s %s%c%s\n", sha1_to_hex(sha1), refname,
0, capabilities); 0, capabilities);

Loading…
Cancel
Save