diff --git a/Documentation/RelNotes/1.7.11.txt b/Documentation/RelNotes/1.7.11.txt index 5925312c93..08a6c31c7f 100644 --- a/Documentation/RelNotes/1.7.11.txt +++ b/Documentation/RelNotes/1.7.11.txt @@ -8,6 +8,9 @@ UI, Workflows & Features * A third-party tool "git subtree" is distributed in contrib/ + * Error messages given when @{u} is used for a branch without its + upstream configured have been clatified. + * Even with "-q"uiet option, "checkout" used to report setting up tracking. Also "branch" learned the "-q"uiet option to squelch informational message. @@ -30,11 +33,20 @@ UI, Workflows & Features * The cases "git push" fails due to non-ff can be broken into three categories; each case is given a separate advise message. + * "git push --recurse-submodules" learned to optionally look into the + histories of submodules bound to the superproject and push them + out. + * A 'snapshot' request to "gitweb" honors If-Modified-Since: header, based on the commit date. + * "gitweb" learned to highlight the patch it outputs even more. + Foreign Interface + * "git svn" used to die with unwanted SIGPIPE when talking with HTTP + server that uses keep-alive. + * "git p4" has been moved out of contrib/ area. Performance @@ -61,6 +73,9 @@ Internal Implementation (please report possible regressions) systems, run-command API now uses SHELL_PATH, not /bin/sh, when spawning an external command (not applicable to Windows port). + * The API to iterate over refs/ hierarchy has been tweaked to allow + walking only a subset of it more efficiently. + Also contains minor documentation updates and code clean-ups. @@ -71,6 +86,17 @@ Unless otherwise noted, all the fixes since v1.7.10 in the maintenance releases are contained in this release (see release notes to them for details). + * The parser in "fast-import" did not diagnose ":9" style references + that is not followed by required SP/LF as an error. + (merge 06454cb pw/fast-import-dataref-parsing later to maint). + + * When "git fetch" encounters repositories with too many references, + the command line of "fetch-pack" that is run by a helper + e.g. remote-curl, may fail to hold all of them. Now such an + internal invocation can feed the references through the standard + input of "fetch-pack". + (merge 7103d25 it/fetch-pack-many-refs later to maint). + * "git fetch" that recurses into submodules on demand did not check if it needs to go into submodules when non branches (most notably, tags) are fetched. diff --git a/git-svn.perl b/git-svn.perl index 4334b95f70..f8e9ef0ea6 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -36,6 +36,11 @@ $ENV{TZ} = 'UTC'; $| = 1; # unbuffer STDOUT sub fatal (@) { print STDERR "@_\n"; exit 1 } + +# All SVN commands do it. Otherwise we may die on SIGPIPE when the remote +# repository decides to close the connection which we expect to be kept alive. +$SIG{PIPE} = 'IGNORE'; + sub _req_svn { require SVN::Core; # use()-ing this causes segfaults for me... *shrug* require SVN::Ra; @@ -2031,6 +2036,7 @@ use IPC::Open3; use Time::Local; use Memoize; # core since 5.8.0, Jul 2002 use Memoize::Storable; +use POSIX qw(:signal_h); my ($_gc_nr, $_gc_period); @@ -4059,11 +4065,14 @@ sub rev_map_set { length $commit == 40 or die "arg3 must be a full SHA1 hexsum\n"; my $db = $self->map_path($uuid); my $db_lock = "$db.lock"; - my $sig; + my $sigmask; $update_ref ||= 0; if ($update_ref) { - $SIG{INT} = $SIG{HUP} = $SIG{TERM} = $SIG{ALRM} = $SIG{PIPE} = - $SIG{USR1} = $SIG{USR2} = sub { $sig = $_[0] }; + $sigmask = POSIX::SigSet->new(); + my $signew = POSIX::SigSet->new(SIGINT, SIGHUP, SIGTERM, + SIGALRM, SIGUSR1, SIGUSR2); + sigprocmask(SIG_BLOCK, $signew, $sigmask) or + croak "Can't block signals: $!"; } mkfile($db); @@ -4102,9 +4111,8 @@ sub rev_map_set { "$db_lock => $db ($!)\n"; delete $LOCKFILES{$db_lock}; if ($update_ref) { - $SIG{INT} = $SIG{HUP} = $SIG{TERM} = $SIG{ALRM} = $SIG{PIPE} = - $SIG{USR1} = $SIG{USR2} = 'DEFAULT'; - kill $sig, $$ if defined $sig; + sigprocmask(SIG_SETMASK, $sigmask) or + croak "Can't restore signal mask: $!"; } }