Sync with 1.8.5

This commit is contained in:
Junio C Hamano 2013-12-05 14:11:11 -08:00
commit 15a42a10ec
28 changed files with 9273 additions and 7590 deletions

View File

@ -0,0 +1,10 @@
Git v1.8.4.4 Release Notes
========================
Fixes since v1.8.4.3
--------------------
* The fix in v1.8.4.3 to the pack transfer protocol to propagate
the target of symbolic refs broke "git clone/git fetch" from a
repository with too many symbolic refs. As a hotfix/workaround,
we transfer only the information on HEAD.

View File

@ -8,7 +8,7 @@ When "git push [$there]" does not say what to push, we have used the
traditional "matching" semantics so far (all your branches were sent
to the remote as long as there already are branches of the same name
over there). In Git 2.0, the default will change to the "simple"
semantics that pushes:
semantics, which pushes:
- only the current branch to the branch with the same name, and only
when the current branch is set to integrate with that remote
@ -53,9 +53,12 @@ Updates since v1.8.4
Foreign interfaces, subsystems and ports.
* "git-svn" used with SVN 1.8.0 when talking over https:// connection
* "git-svn" has been taught to use the serf library, which is the
only option SVN 1.8.0 offers us when talking the HTTP protocol.
* "git-svn" talking over an https:// connection using the serf library
dumped core due to a bug in the serf library that SVN uses. Work
it around on our side, even though the SVN side is being fixed.
around it on our side, even though the SVN side is being fixed.
* On MacOS X, we detected if the filesystem needs the "pre-composed
unicode strings" workaround, but did not automatically enable it.
@ -65,10 +68,7 @@ Foreign interfaces, subsystems and ports.
repository relative to the home directory, e.g. "clone hg::~/there".
* imap-send ported to OS X uses Apple's security framework instead of
OpenSSL one.
* Subversion 1.8.0 that was recently released breaks older subversion
clients coming over http/https in various ways.
OpenSSL's.
* "git fast-import" treats an empty path given to "ls" as the root of
the tree.
@ -79,22 +79,22 @@ UI, Workflows & Features
* xdg-open can be used as a browser backend for "git web-browse"
(hence to show "git help -w" output), when available.
* "git grep" and "git show" pays attention to "--textconv" option
* "git grep" and "git show" pay attention to the "--textconv" option
when these commands are told to operate on blob objects (e.g. "git
grep -e pattern HEAD:Makefile").
grep -e pattern --textconv HEAD:Makefile").
* "git replace" helper no longer allows an object to be replaced with
another object of a different type to avoid confusion (you can
still manually craft such replacement using "git update-ref", as an
still manually craft such a replacement using "git update-ref", as an
escape hatch).
* "git status" no longer prints dirty status information for
* "git status" no longer prints the dirty status information of
submodules for which submodule.$name.ignore is set to "all".
* "git rebase -i" honours core.abbrev when preparing the insn sheet
for editing.
* "git status" during a cherry-pick shows what original commit is
* "git status" during a cherry-pick shows which original commit is
being picked.
* Instead of typing four capital letters "HEAD", you can say "@" now,
@ -102,21 +102,21 @@ UI, Workflows & Features
* "git check-ignore" follows the same rule as "git add" and "git
status" in that the ignore/exclude mechanism does not take effect
on paths that are already tracked. With "--no-index" option, it
on paths that are already tracked. With the "--no-index" option, it
can be used to diagnose which paths that should have been ignored
have been mistakenly added to the index.
* Some irrelevant "advice" messages that are shared with "git status"
output have been removed from the commit log template.
* "update-refs" learnt a "--stdin" option to read multiple update
* "update-refs" learned a "--stdin" option to read multiple update
requests and perform them in an all-or-none fashion.
* Just like "make -C <directory>", "git -C <directory> ..." tells Git
to go there before doing anything else.
* Just like "git checkout -" knows to check out and "git merge -"
knows to merge the branch you were previously on, "git cherry-pick"
* Just like "git checkout -" knows to check out, and "git merge -"
knows to merge, the branch you were previously on, "git cherry-pick"
now understands "git cherry-pick -" to pick from the previous
branch.
@ -126,56 +126,58 @@ UI, Workflows & Features
"git status --porcelain" instead, as its format is stable and easier
to parse.
* Make "foo^{tag}" to peel a tag to itself, i.e. no-op., and fail if
"foo" is not a tag. "git rev-parse --verify v1.0^{tag}" would be
a more convenient way to say "test $(git cat-file -t v1.0) = tag".
* The ref syntax "foo^{tag}" (with the literal string "{tag}") peels a
tag ref to itself, i.e. it's a no-op., and fails if
"foo" is not a tag. "git rev-parse --verify v1.0^{tag}" is
a more convenient way than "test $(git cat-file -t v1.0) = tag" to
check if v1.0 is a tag.
* "git branch -v -v" (and "git status") did not distinguish among a
branch that does not build on any other branch, a branch that is in
sync with the branch it builds on, and a branch that is configured
to build on some other branch that no longer exists.
branch that is not based on any other branch, a branch that is in
sync with its upstream branch, and a branch that is configured with an
upstream branch that no longer exists.
* Earlier we started rejecting an attempt to add 0{40} object name to
* Earlier we started rejecting any attempt to add the 0{40} object name to
the index and to tree objects, but it sometimes is necessary to
allow so to be able to use tools like filter-branch to correct such
broken tree objects. "filter-branch" can again be used to to do
so.
allow this to be able to use tools like filter-branch to correct such
broken tree objects. "filter-branch" can again be used to do this.
* "git config" did not provide a way to set or access numbers larger
than a native "int" on the platform; it now provides 64-bit signed
integers on all platforms.
* "git pull --rebase" always chose to do the bog-standard flattening
rebase. You can tell it to run "rebase --preserve-merges" by
rebase. You can tell it to run "rebase --preserve-merges" with
"git pull --rebase=preserve" or by
setting "pull.rebase" configuration to "preserve".
* "git push --no-thin" actually disables the "thin pack transfer"
optimization.
* Magic pathspecs like ":(icase)makefile" that matches both Makefile
and makefile and ":(glob)foo/**/bar" that matches "bar" in "foo"
and any subdirectory of "foo" can be used in more places.
* Magic pathspecs like ":(icase)makefile" (matches both Makefile
and makefile) and ":(glob)foo/**/bar" (matches "bar" in "foo"
and any subdirectory of "foo") can be used in more places.
* The "http.*" variables can now be specified per URL that the
configuration applies. For example,
* The "http.*" variables can now be specified for individual URLs.
For example,
[http]
sslVerify = true
[http "https://weak.example.com/"]
sslVerify = false
would flip http.sslVerify off only when talking to that specified
would flip http.sslVerify off only when talking to that specific
site.
* "git mv A B" when moving a submodule A has been taught to
relocate its working tree and to adjust the paths in the
* "git mv A B" when moving a submodule has been taught to
relocate the submodule's working tree and to adjust the paths in the
.gitmodules file.
* "git blame" can now take more than one -L option to discover the
origin of multiple blocks of the lines.
origin of multiple blocks of lines.
* The http transport clients can optionally ask to save cookies
with http.savecookies configuration variable.
with the http.savecookies configuration variable.
* "git push" learned a more fine grained control over a blunt
"--force" when requesting a non-fast-forward update with the
@ -197,7 +199,7 @@ UI, Workflows & Features
* "git whatchanged" may still be used by old timers, but mention of
it in documents meant for new users will only waste readers' time
wonderig what the difference is between it and "git log". Make it
wondering what the difference is between it and "git log". Make it
less prominent in the general part of the documentation and explain
that it is merely a "git log" with different default behaviour in
its own document.
@ -219,23 +221,23 @@ Performance, Internal Implementation, etc.
should apply the same "no subprocess or pipe" optimization as we
apply to user-supplied GIT_PAGER=cat.
* Many commands use --dashed-option as a operation mode selector
(e.g. "git tag --delete") that the user can use at most one
(e.g. "git tag --delete --verify" is a nonsense) and you cannot
negate (e.g. "git tag --no-delete" is a nonsense). parse-options
* Many commands use a --dashed-option as an operation mode selector
(e.g. "git tag --delete") that excludes other operation modes
(e.g. "git tag --delete --verify" is nonsense) and that cannot be
negated (e.g. "git tag --no-delete" is nonsense). The parse-options
API learned a new OPT_CMDMODE macro to make it easier to implement
such a set of options.
* OPT_BOOLEAN() in parse-options API was misdesigned to be "counting
* OPT_BOOLEAN() in the parse-options API was misdesigned to be "counting
up" but many subcommands expect it to behave as "on/off". Update
them to use OPT_BOOL() which is a proper boolean.
* "git gc" exits early without doing a double-work when it detects
* "git gc" exits early without doing any work when it detects
that another instance of itself is already running.
* Under memory pressure and/or file descriptor pressure, we used to
close pack windows that are not used and also closed filehandle to
an open but unused packfiles. These are now controlled separately
close pack windows that are not used and also closed filehandles to
open but unused packfiles. These are now controlled separately
to better cope with the load.
Also contains various documentation updates and code clean-ups.
@ -245,32 +247,32 @@ Fixes since v1.8.4
------------------
Unless otherwise noted, all the fixes since v1.8.4 in the maintenance
track are contained in this release (see release notes to them for
track are contained in this release (see the maintenance releases' notes for
details).
* An ancient How-To on serving Git repositories on an HTTP server
lacked a warning that it has been mostly superseded with more
lacked a warning that it has been mostly superseded with a more
modern way.
(merge 6d52bc3 sc/doc-howto-dumb-http later to maint).
* The interaction between use of Perl in our test suite and NO_PERL
* The interaction between the use of Perl in our test suite and NO_PERL
has been clarified a bit.
(merge f8fc0ee jn/test-prereq-perl-doc later to maint).
* The synopsis section of "git unpack-objects" documentation has been
* The synopsis section of the "git unpack-objects" documentation has been
clarified a bit.
(merge 61e2e22 vd/doc-unpack-objects later to maint).
* We did not generate HTML version of documentation to "git subtree"
* We did not generate the HTML version of the documentation to "git subtree"
in contrib/.
(merge 95c62fb jk/subtree-install-fix later to maint).
* A fast-import stream expresses a pathname with funny characters by
quoting them in C style; remote-hg remote helper forgot to unquote
quoting them in C style; the remote-hg remote helper forgot to unquote
such a path.
(merge 1136265 ap/remote-hg-unquote-cquote later to maint).
* "git reset -p HEAD" has a codepath to special case it to behave
* "git reset -p HEAD" has a codepath to special-case it to behave
differently from resetting to contents of other commits, but a
recent change broke it.
@ -289,38 +291,38 @@ details).
"HEAD" points at, and the receiving end needed to guess. A new
capability has been defined in the pack protocol to convey this
information so that cloning from a repository with more than one
branches pointing at the same commit where the HEAD is at now
branch pointing at the same commit where the HEAD is at now
reliably sets the initial branch in the resulting repository.
(merge 360a326 jc/upload-pack-send-symref later to maint).
* We did not handle cases where http transport gets redirected during
* We did not handle cases where the http transport gets redirected during
the authorization request (e.g. from http:// to https://).
(merge 70900ed jk/http-auth-redirects later to maint).
* Bash prompting code to deal with an SVN remote as an upstream
were coded in a way not supported by older Bash versions (3.x).
was coded in a way unsupported by older Bash versions (3.x).
(merge 52ec889 sg/prompt-svn-remote-fix later to maint).
* The fall-back parsing of commit objects with broken author or
committer lines were less robust than ideal in picking up the
committer lines was less robust than ideal in picking up the
timestamps.
(merge 03818a4 jk/split-broken-ident later to maint).
* "git rev-list --objects ^v1.0^ v1.0" gave v1.0 tag itself in the
* "git rev-list --objects ^v1.0^ v1.0" gave the v1.0 tag itself in the
output, but "git rev-list --objects v1.0^..v1.0" did not.
(merge 895c5ba jc/revision-range-unpeel later to maint).
* "git clone" gave some progress messages to the standard output, not
to the standard error, and did not allow suppressing them with the
* "git clone" wrote some progress messages to standard output, not
to standard error, and did not suppress them with the
--no-progress option.
(merge 643f918 jk/clone-progress-to-stderr later to maint).
* "format-patch --from=<whom>" forgot to omit unnecessary in-body
* "format-patch --from=<whom>" forgot to omit an unnecessary in-body
from line, i.e. when <whom> is the same as the real author.
(merge 662cc30 jk/format-patch-from later to maint).
* "git shortlog" used to choke and die when there is a malformed
commit (e.g. missing authors); it now simply ignore such a commit
commit (e.g. missing authors); it now simply ignores such a commit
and keeps going.
(merge cd4f09e jk/shortlog-tolerate-broken-commit later to maint).
@ -334,16 +336,16 @@ details).
small empty messages to keep the connection alive.
(merge 115dedd jk/upload-pack-keepalive later to maint).
* "git rebase" had a portability regression in v1.8.4 to trigger a
* "git rebase" had a portability regression in v1.8.4 that triggered a
bug in some BSD shell implementations.
(merge 99855dd mm/rebase-continue-freebsd-WB later to maint).
* "git branch --track" had a minor regression in v1.8.3.2 and later
that made it impossible to base your local work on anything but a
local branch of the upstream repository you are tracking from.
local branch of the upstream repository you are tracking.
(merge b0f49ff jh/checkout-auto-tracking later to maint).
* When the webserver responds with "405 Method Not Allowed", "git
* When the web server responds with "405 Method Not Allowed", "git
http-backend" should tell the client what methods are allowed with
the "Allow" header.
(merge 9247be0 bc/http-backend-allow-405 later to maint).
@ -357,22 +359,22 @@ details).
executable files.
(merge 1b48d56 jc/cvsserver-perm-bit-fix later to maint).
* When send-email comes up with an error message to die with upon
* When send-email obtains an error message to die with upon
failure to start an SSL session, it tried to read the error string
from a wrong place.
(merge 6cb0c88 bc/send-email-ssl-die-message-fix later to maint).
* The implementation of "add -i" has a crippling code to work around
* The implementation of "add -i" has some crippling code to work around an
ActiveState Perl limitation but it by mistake also triggered on Git
for Windows where MSYS perl is used.
(merge df17e77 js/add-i-mingw later to maint).
* We made sure that we notice the user-supplied GIT_DIR is actually a
* We made sure that we notice when the user-supplied GIT_DIR is actually a
gitfile, but did not do the same when the default ".git" is a
gitfile.
(merge 487a2b7 nd/git-dir-pointing-at-gitfile later to maint).
* When an object is not found after checking the packfiles and then
* When an object is not found after checking the packfiles and the
loose object directory, read_sha1_file() re-checks the packfiles to
prevent racing with a concurrent repacker; teach the same logic to
has_sha1_file().
@ -390,22 +392,22 @@ details).
made it unnecessarily inefficient.
(merge 680be04 jc/ls-files-killed-optim later to maint).
* The commit object names in the insn sheet that was prepared at the
beginning of "rebase -i" session can become ambiguous as the
* The shortened commit object names in the insn sheet that is prepared at the
beginning of a "rebase -i" session can become ambiguous as the
rebasing progresses and the repository gains more commits. Make
sure the internal record is kept with full 40-hex object names.
(merge 75c6976 es/rebase-i-no-abbrev later to maint).
* "git rebase --preserve-merges" internally used the merge machinery
and as a side effect, left merge summary message in the log, but
when rebasing, there should not be a need for merge summary.
and as a side effect left the merge summary message in the log, but
when rebasing there is no need for the merge summary.
(merge a9f739c rt/rebase-p-no-merge-summary later to maint).
* A call to xread() was used without a loop around to cope with short
read in the codepath to stream new contents to a pack.
* A call to xread() was used without a loop around it to cope with short
reads in the codepath to stream new contents to a pack.
(merge e92527c js/xread-in-full later to maint).
* "git rebase -i" forgot that the comment character can be
* "git rebase -i" forgot that the comment character is
configurable while reading its insn sheet.
(merge 7bca7af es/rebase-i-respect-core-commentchar later to maint).
@ -416,8 +418,8 @@ details).
* We used to send a large request to read(2)/write(2) as a single
system call, which was bad from the latency point of view when
the operation needs to be killed, and also triggered an error on
broken 64-bit systems that refuse to take more than 2GB read or
write in one go.
broken 64-bit systems that refuse to read or write more than 2GB
in one go.
(merge a487916 sp/clip-read-write-to-8mb later to maint).
* "git fetch" that auto-followed tags incorrectly reused the
@ -431,17 +433,17 @@ details).
had a similar problem.
(merge 838f9a1 tr/log-full-diff-keep-true-parents later to maint).
* Setting submodule.*.path configuration variable to true (without
* Setting a submodule.*.path configuration variable to true (without
giving "= value") caused Git to segfault.
(merge 4b05440 jl/some-submodule-config-are-not-boolean later to maint).
* "git rebase -i" (there could be others, as the root cause is pretty
generic) fed a random, data dependeant string to 'echo' and
expects it to come out literally, corrupting its error message.
generic) fed a random, data dependent string to 'echo' and
expected it to come out literally, corrupting its error message.
(merge 89b0230 mm/no-shell-escape-in-die-message later to maint).
* Some people still use rather old versions of bash, which cannot
grok some constructs like 'printf -v varname' the prompt and
grok some constructs like 'printf -v varname' which the prompt and
completion code started to use recently.
(merge a44aa69 bc/completion-for-bash-3.0 later to maint).

View File

@ -8,9 +8,9 @@ endif::git-commit[]
support the following date formats:
Git internal format::
It is `<unix timestamp> <timezone offset>`, where `<unix
It is `<unix timestamp> <time zone offset>`, where `<unix
timestamp>` is the number of seconds since the UNIX epoch.
`<timezone offset>` is a positive or negative offset from UTC.
`<time zone offset>` is a positive or negative offset from UTC.
For example CET (which is 2 hours ahead UTC) is `+0200`.
RFC 2822::

View File

@ -103,7 +103,7 @@ This header line is followed by the following information
at least once for each commit:
- the author name ("author"), email ("author-mail"), time
("author-time"), and timezone ("author-tz"); similarly
("author-time"), and time zone ("author-tz"); similarly
for committer.
- the filename in the commit that the line is attributed to.
- the first line of the commit log message ("summary").

View File

@ -144,7 +144,7 @@ This option can be used several times to provide several detection regexes.
CVS by default uses the Unix username when writing its
commit logs. Using this option and an author-conv-file
maps the name recorded in CVS to author name, e-mail and
optional timezone:
optional time zone:
+
---------
exon=Andreas Ericsson <ae@op5.se>
@ -154,7 +154,7 @@ This option can be used several times to provide several detection regexes.
+
'git cvsimport' will make it appear as those authors had
their GIT_AUTHOR_NAME and GIT_AUTHOR_EMAIL set properly
all along. If a timezone is specified, GIT_AUTHOR_DATE will
all along. If a time zone is specified, GIT_AUTHOR_DATE will
have the corresponding offset applied.
+
For convenience, this data is saved to `$GIT_DIR/cvs-authors`

View File

@ -251,7 +251,7 @@ advisement to help formatting routines display the timestamp.
If the local offset is not available in the source material, use
``+0000'', or the most common local offset. For example many
organizations have a CVS repository which has only ever been accessed
by users who are located in the same location and timezone. In this
by users who are located in the same location and time zone. In this
case a reasonable offset from UTC could be assumed.
+
Unlike the `rfc2822` format, this format is very strict. Any
@ -271,7 +271,7 @@ the malformed string. There are also some types of malformed
strings which Git will parse wrong, and yet consider valid.
Seriously malformed strings will be rejected.
+
Unlike the `raw` format above, the timezone/UTC offset information
Unlike the `raw` format above, the time zone/UTC offset information
contained in an RFC 2822 date string is used to adjust the date
value to UTC prior to storage. Therefore it is important that
this information be as accurate as possible.
@ -287,13 +287,13 @@ format, or its format is easily convertible to it, as there is no
ambiguity in parsing.
`now`::
Always use the current time and timezone. The literal
Always use the current time and time zone. The literal
`now` must always be supplied for `<when>`.
+
This is a toy format. The current time and timezone of this system
This is a toy format. The current time and time zone of this system
is always copied into the identity string at the time it is being
created by fast-import. There is no way to specify a different time or
timezone.
time zone.
+
This particular format is supplied as it's short to implement and
may be useful to a process that wants to create a new commit

View File

@ -124,15 +124,15 @@ This automatically updates the rev_map if needed (see
'$GIT_DIR/svn/\*\*/.rev_map.*' in the FILES section below for details).
--localtime;;
Store Git commit times in the local timezone instead of UTC. This
Store Git commit times in the local time zone instead of UTC. This
makes 'git log' (even without --date=local) show the same times
that `svn log` would in the local timezone.
that `svn log` would in the local time zone.
+
This doesn't interfere with interoperating with the Subversion
repository you cloned from, but if you wish for your local Git
repository to be able to interoperate with someone else's local Git
repository, either don't use this option or you should both use it in
the same local timezone.
the same local time zone.
--parent;;
Fetch only from the SVN parent of the current HEAD.

View File

@ -43,9 +43,15 @@ unreleased) version of Git, that is available from 'master'
branch of the `git.git` repository.
Documentation for older releases are available here:
* link:v1.8.4.3/git.html[documentation for release 1.8.4.3]
* link:v1.8.5/git.html[documentation for release 1.8.5]
* release notes for
link:RelNotes/1.8.5.txt[1.8.5].
* link:v1.8.4.4/git.html[documentation for release 1.8.4.4]
* release notes for
link:RelNotes/1.8.4.4.txt[1.8.4.4],
link:RelNotes/1.8.4.3.txt[1.8.4.3],
link:RelNotes/1.8.4.2.txt[1.8.4.2],
link:RelNotes/1.8.4.1.txt[1.8.4.1],

View File

@ -822,18 +822,18 @@ timed::
Project specific override is not supported.
javascript-timezone::
Enable and configure the ability to change a common timezone for dates
Enable and configure the ability to change a common time zone for dates
in gitweb output via JavaScript. Dates in gitweb output include
authordate and committerdate in "commit", "commitdiff" and "log"
views, and taggerdate in "tag" view. Enabled by default.
+
The value is a list of three values: a default timezone (for if the client
hasn't selected some other timezone and saved it in a cookie), a name of cookie
where to store selected timezone, and a CSS class used to mark up
The value is a list of three values: a default time zone (for if the client
hasn't selected some other time zone and saved it in a cookie), a name of cookie
where to store selected time zone, and a CSS class used to mark up
dates for manipulation. If you want to turn this feature off, set "default"
to empty list: `[]`.
+
Typical gitweb config files will only change starting (default) timezone,
Typical gitweb config files will only change starting (default) time zone,
and leave other elements at their default values:
+
---------------------------------------------------------------------------
@ -843,9 +843,9 @@ $feature{'javascript-timezone'}{'default'}[0] = "utc";
The example configuration presented here is guaranteed to be backwards
and forward compatible.
+
Timezone values can be "local" (for local timezone that browser uses), "utc"
Time zone values can be "local" (for local time zone that browser uses), "utc"
(what gitweb uses when JavaScript or this feature is disabled), or numerical
timezones in the form of "+/-HHMM", such as "+0200".
time zones in the form of "+/-HHMM", such as "+0200".
+
Project specific override is not supported.

View File

@ -720,7 +720,7 @@ include::pretty-options.txt[]
`--date=relative` shows dates relative to the current time,
e.g. "2 hours ago".
+
`--date=local` shows timestamps in user's local timezone.
`--date=local` shows timestamps in user's local time zone.
+
`--date=iso` (or `--date=iso8601`) shows timestamps in ISO 8601 format.
+
@ -731,7 +731,7 @@ format, often found in E-mail messages.
+
`--date=raw` shows the date in the internal raw Git format `%s %z` format.
+
`--date=default` shows timestamps in the original timezone
`--date=default` shows timestamps in the original time zone
(either committer's or author's).
ifdef::git-rev-list[]

View File

@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
DEF_VER=v1.8.5-rc1
DEF_VER=v1.8.5
LF='
'

View File

@ -409,7 +409,9 @@ static struct origin *find_origin(struct scoreboard *sb,
paths[0] = origin->path;
paths[1] = NULL;
parse_pathspec(&diff_opts.pathspec, PATHSPEC_ALL_MAGIC, 0, "", paths);
parse_pathspec(&diff_opts.pathspec,
PATHSPEC_ALL_MAGIC & ~PATHSPEC_LITERAL,
PATHSPEC_LITERAL_PATH, "", paths);
diff_setup_done(&diff_opts);
if (is_null_sha1(origin->commit->object.sha1))

View File

@ -424,6 +424,7 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,
struct branch *branch = branch_get(branch_name);
struct strbuf fancy = STRBUF_INIT;
int upstream_is_gone = 0;
int added_decoration = 1;
switch (stat_tracking_info(branch, &ours, &theirs)) {
case 0:
@ -451,9 +452,13 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,
if (upstream_is_gone) {
if (show_upstream_ref)
strbuf_addf(stat, _("[%s: gone]"), fancy.buf);
else
added_decoration = 0;
} else if (!ours && !theirs) {
if (show_upstream_ref)
strbuf_addf(stat, _("[%s]"), fancy.buf);
else
added_decoration = 0;
} else if (!ours) {
if (show_upstream_ref)
strbuf_addf(stat, _("[%s: behind %d]"), fancy.buf, theirs);
@ -474,7 +479,8 @@ static void fill_tracking_info(struct strbuf *stat, const char *branch_name,
ours, theirs);
}
strbuf_release(&fancy);
strbuf_addch(stat, ' ');
if (added_decoration)
strbuf_addch(stat, ' ');
free(ref);
}

View File

@ -747,7 +747,7 @@ def parse_commit(parser):
f = { 'deleted' : True }
else:
die('Unknown file command: %s' % line)
path = c_style_unescape(path).decode('utf-8')
path = c_style_unescape(path)
files[path] = f
# only export the commits if we are on an internal proxy repo

View File

@ -128,7 +128,11 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
die(_("global 'literal' pathspec setting is incompatible "
"with all other global pathspec settings"));
if (elt[0] != ':' || literal_global) {
if (flags & PATHSPEC_LITERAL_PATH)
global_magic = 0;
if (elt[0] != ':' || literal_global ||
(flags & PATHSPEC_LITERAL_PATH)) {
; /* nothing to do */
} else if (elt[1] == '(') {
/* longhand */
@ -405,6 +409,9 @@ void parse_pathspec(struct pathspec *pathspec,
item[i].magic = prefix_pathspec(item + i, &short_magic,
argv + i, flags,
prefix, prefixlen, entry);
if ((flags & PATHSPEC_LITERAL_PATH) &&
!(magic_mask & PATHSPEC_LITERAL))
item[i].magic |= PATHSPEC_LITERAL;
if (item[i].magic & magic_mask)
unsupported_magic(entry,
item[i].magic & magic_mask,

View File

@ -58,6 +58,13 @@ struct pathspec {
#define PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE (1<<5)
#define PATHSPEC_PREFIX_ORIGIN (1<<6)
#define PATHSPEC_KEEP_ORDER (1<<7)
/*
* For the callers that just need pure paths from somewhere else, not
* from command line. Global --*-pathspecs options are ignored. No
* magic is parsed in each pathspec either. If PATHSPEC_LITERAL is
* allowed, then it will automatically set for every pathspec.
*/
#define PATHSPEC_LITERAL_PATH (1<<8)
extern void parse_pathspec(struct pathspec *pathspec,
unsigned magic_mask,

View File

@ -8,7 +8,7 @@ Leader: Byrial Jensen <byrial@vip.cybercity.dk>
Language: de (German)
Repository: https://github.com/ralfth/git-po-de
Leader: Ralf Thielow <ralf.thielow@googlemail.com>
Members: Thomas Rast <trast@student.ethz.ch>
Members: Thomas Rast <tr@thomasrast.ch>
Jan Krüger <jk@jk.gs>
Christian Stimming <stimming@tuhh.de>

2720
po/de.po

File diff suppressed because it is too large Load Diff

2743
po/fr.po

File diff suppressed because it is too large Load Diff

2754
po/git.pot

File diff suppressed because it is too large Load Diff

2720
po/sv.po

File diff suppressed because it is too large Load Diff

2842
po/vi.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1372,8 +1372,8 @@ static void prepare_show_merge(struct rev_info *revs)
i++;
}
free_pathspec(&revs->prune_data);
parse_pathspec(&revs->prune_data, PATHSPEC_ALL_MAGIC,
PATHSPEC_PREFER_FULL, "", prune);
parse_pathspec(&revs->prune_data, PATHSPEC_ALL_MAGIC & ~PATHSPEC_LITERAL,
PATHSPEC_PREFER_FULL | PATHSPEC_LITERAL_PATH, "", prune);
revs->limited = 1;
}

View File

@ -39,12 +39,14 @@ test_expect_success setup '
advance h
'
script='s/^..\(b.\)[ 0-9a-f]*\[\([^]]*\)\].*/\1 \2/p'
script='s/^..\(b.\) *[0-9a-f]* \(.*\)$/\1 \2/p'
cat >expect <<\EOF
b1 ahead 1, behind 1
b2 ahead 1, behind 1
b3 behind 1
b4 ahead 2
b1 [ahead 1, behind 1] d
b2 [ahead 1, behind 1] d
b3 [behind 1] b
b4 [ahead 2] f
b5 g
b6 c
EOF
test_expect_success 'branch -v' '
@ -57,12 +59,12 @@ test_expect_success 'branch -v' '
'
cat >expect <<\EOF
b1 origin/master: ahead 1, behind 1
b2 origin/master: ahead 1, behind 1
b3 origin/master: behind 1
b4 origin/master: ahead 2
b5 brokenbase: gone
b6 origin/master
b1 [origin/master: ahead 1, behind 1] d
b2 [origin/master: ahead 1, behind 1] d
b3 [origin/master: behind 1] b
b4 [origin/master: ahead 2] f
b5 [brokenbase: gone] g
b6 [origin/master] c
EOF
test_expect_success 'branch -vv' '

View File

@ -108,6 +108,13 @@ test_expect_success 'no-glob environment variable works' '
test_cmp expect actual
'
test_expect_success 'blame takes global pathspec flags' '
git --literal-pathspecs blame -- foo &&
git --icase-pathspecs blame -- foo &&
git --glob-pathspecs blame -- foo &&
git --noglob-pathspecs blame -- foo
'
test_expect_success 'setup xxx/bar' '
mkdir xxx &&
test_commit xxx xxx/bar

View File

@ -254,7 +254,9 @@ static void try_to_follow_renames(struct tree_desc *t1, struct tree_desc *t2, co
path[0] = p->one->path;
path[1] = NULL;
free_pathspec(&opt->pathspec);
parse_pathspec(&opt->pathspec, PATHSPEC_ALL_MAGIC, 0, "", path);
parse_pathspec(&opt->pathspec,
PATHSPEC_ALL_MAGIC & ~PATHSPEC_LITERAL,
PATHSPEC_LITERAL_PATH, "", path);
/*
* The caller expects us to return a set of vanilla

View File

@ -753,7 +753,6 @@ static void upload_pack(void)
struct string_list symref = STRING_LIST_INIT_DUP;
head_ref_namespaced(find_symref, &symref);
for_each_namespaced_ref(find_symref, &symref);
if (advertise_refs || !stateless_rpc) {
reset_timeout();