Merge fixes up to GIT 1.2.2
This commit is contained in:
commit
709a9e5771
@ -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.
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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
Executable file
63
t/t7101-reset.sh
Executable file
@ -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
|
@ -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
|
|
||||||
|
@ -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…
Reference in New Issue
Block a user