Sync with 1.7.11.7
commit
c336bc104c
|
@ -189,6 +189,7 @@
|
||||||
/test-mktemp
|
/test-mktemp
|
||||||
/test-parse-options
|
/test-parse-options
|
||||||
/test-path-utils
|
/test-path-utils
|
||||||
|
/test-regex
|
||||||
/test-revision-walking
|
/test-revision-walking
|
||||||
/test-run-command
|
/test-run-command
|
||||||
/test-sha1
|
/test-sha1
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
Git v1.7.11.7 Release Notes
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Fixes since v1.7.11.6
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
* The synopsis said "checkout [-B branch]" to make it clear the
|
||||||
|
branch name is a parameter to the option, but the heading for the
|
||||||
|
option description was "-B::", not "-B branch::", making the
|
||||||
|
documentation misleading.
|
||||||
|
|
||||||
|
* Git ships with a fall-back regexp implementation for platforms with
|
||||||
|
buggy regexp library, but it was easy for people to keep using their
|
||||||
|
platform regexp. A new test has been added to check this.
|
||||||
|
|
||||||
|
* "git apply -p0" did not parse pathnames on "diff --git" line
|
||||||
|
correctly. This caused patches that had pathnames in no other
|
||||||
|
places to be mistakenly rejected (most notably, binary patch that
|
||||||
|
does not rename nor change mode). Textual patches, renames or mode
|
||||||
|
changes have preimage and postimage pathnames in different places
|
||||||
|
in a form that can be parsed unambiguously and did not suffer from
|
||||||
|
this problem.
|
||||||
|
|
||||||
|
* After "gitk" showed the contents of a tag, neither "Reread
|
||||||
|
references" nor "Reload" did not update what is shown as the
|
||||||
|
contents of it, when the user overwrote the tag with "git tag -f".
|
||||||
|
|
||||||
|
* "git for-each-ref" did not currectly support more than one --sort
|
||||||
|
option.
|
||||||
|
|
||||||
|
* "git log .." errored out saying it is both rev range and a path
|
||||||
|
when there is no disambiguating "--" is on the command line.
|
||||||
|
Update the command line parser to interpret ".." as a path in such
|
||||||
|
a case.
|
||||||
|
|
||||||
|
* Pushing to smart HTTP server with recent Git fails without having
|
||||||
|
the username in the URL to force authentication, if the server is
|
||||||
|
configured to allow GET anonymously, while requiring authentication
|
||||||
|
for POST.
|
||||||
|
|
||||||
|
* "git show --format='%ci'" did not give timestamp correctly for
|
||||||
|
commits created without human readable name on "committer" line.
|
||||||
|
(merge e27ddb6 jc/maint-ident-missing-human-name later to maint).
|
||||||
|
|
||||||
|
* "git show --quiet" ought to be a synonym for "git show -s", but
|
||||||
|
wasn't.
|
|
@ -367,6 +367,18 @@ $ git checkout hello.c <3>
|
||||||
<2> take a file out of another commit
|
<2> take a file out of another commit
|
||||||
<3> restore hello.c from the index
|
<3> restore hello.c from the index
|
||||||
+
|
+
|
||||||
|
If you want to check out _all_ C source files out of the index,
|
||||||
|
you can say
|
||||||
|
+
|
||||||
|
------------
|
||||||
|
$ git checkout -- '*.c'
|
||||||
|
------------
|
||||||
|
+
|
||||||
|
Note the quotes around `*.c`. The file `hello.c` will also be
|
||||||
|
checked out, even though it is no longer in the working tree,
|
||||||
|
because the file globbing is used to match entries in the index
|
||||||
|
(not in the working tree by the shell).
|
||||||
|
+
|
||||||
If you have an unfortunate branch that is named `hello.c`, this
|
If you have an unfortunate branch that is named `hello.c`, this
|
||||||
step would be confused as an instruction to switch to that branch.
|
step would be confused as an instruction to switch to that branch.
|
||||||
You should instead write:
|
You should instead write:
|
||||||
|
|
|
@ -48,9 +48,10 @@ Documentation for older releases are available here:
|
||||||
* release notes for
|
* release notes for
|
||||||
link:RelNotes/1.7.12.txt[1.7.12].
|
link:RelNotes/1.7.12.txt[1.7.12].
|
||||||
|
|
||||||
* link:v1.7.11.6/git.html[documentation for release 1.7.11.6]
|
* link:v1.7.11.7/git.html[documentation for release 1.7.11.7]
|
||||||
|
|
||||||
* release notes for
|
* release notes for
|
||||||
|
link:RelNotes/1.7.11.7.txt[1.7.11.7],
|
||||||
link:RelNotes/1.7.11.6.txt[1.7.11.6],
|
link:RelNotes/1.7.11.6.txt[1.7.11.6],
|
||||||
link:RelNotes/1.7.11.5.txt[1.7.11.5],
|
link:RelNotes/1.7.11.5.txt[1.7.11.5],
|
||||||
link:RelNotes/1.7.11.4.txt[1.7.11.4],
|
link:RelNotes/1.7.11.4.txt[1.7.11.4],
|
||||||
|
|
|
@ -37,11 +37,28 @@ arguments. Here are the rules:
|
||||||
file called HEAD in your work tree, `git diff HEAD` is ambiguous, and
|
file called HEAD in your work tree, `git diff HEAD` is ambiguous, and
|
||||||
you have to say either `git diff HEAD --` or `git diff -- HEAD` to
|
you have to say either `git diff HEAD --` or `git diff -- HEAD` to
|
||||||
disambiguate.
|
disambiguate.
|
||||||
|
+
|
||||||
When writing a script that is expected to handle random user-input, it is
|
When writing a script that is expected to handle random user-input, it is
|
||||||
a good practice to make it explicit which arguments are which by placing
|
a good practice to make it explicit which arguments are which by placing
|
||||||
disambiguating `--` at appropriate places.
|
disambiguating `--` at appropriate places.
|
||||||
|
|
||||||
|
* Many commands allow wildcards in paths, but you need to protect
|
||||||
|
them from getting globbed by the shell. These two mean different
|
||||||
|
things:
|
||||||
|
+
|
||||||
|
--------------------------------
|
||||||
|
$ git checkout -- *.c
|
||||||
|
$ git checkout -- \*.c
|
||||||
|
--------------------------------
|
||||||
|
+
|
||||||
|
The former lets your shell expand the fileglob, and you are asking
|
||||||
|
the dot-C files in your working tree to be overwritten with the version
|
||||||
|
in the index. The latter passes the `*.c` to Git, and you are asking
|
||||||
|
the paths in the index that match the pattern to be checked out to your
|
||||||
|
working tree. After running `git add hello.c; rm hello.c`, you will _not_
|
||||||
|
see `hello.c` in your working tree with the former, but with the latter
|
||||||
|
you will.
|
||||||
|
|
||||||
Here are the rules regarding the "flags" that you should follow when you are
|
Here are the rules regarding the "flags" that you should follow when you are
|
||||||
scripting git:
|
scripting git:
|
||||||
|
|
||||||
|
|
1
Makefile
1
Makefile
|
@ -496,6 +496,7 @@ TEST_PROGRAMS_NEED_X += test-mergesort
|
||||||
TEST_PROGRAMS_NEED_X += test-mktemp
|
TEST_PROGRAMS_NEED_X += test-mktemp
|
||||||
TEST_PROGRAMS_NEED_X += test-parse-options
|
TEST_PROGRAMS_NEED_X += test-parse-options
|
||||||
TEST_PROGRAMS_NEED_X += test-path-utils
|
TEST_PROGRAMS_NEED_X += test-path-utils
|
||||||
|
TEST_PROGRAMS_NEED_X += test-regex
|
||||||
TEST_PROGRAMS_NEED_X += test-revision-walking
|
TEST_PROGRAMS_NEED_X += test-revision-walking
|
||||||
TEST_PROGRAMS_NEED_X += test-run-command
|
TEST_PROGRAMS_NEED_X += test-run-command
|
||||||
TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
|
TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
|
||||||
|
|
|
@ -478,6 +478,20 @@ static void export_one(const char *var, const char *s, const char *e, int hack)
|
||||||
strbuf_release(&buf);
|
strbuf_release(&buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int sane_ident_split(struct ident_split *person)
|
||||||
|
{
|
||||||
|
if (!person->name_begin || !person->name_end ||
|
||||||
|
person->name_begin == person->name_end)
|
||||||
|
return 0; /* no human readable name */
|
||||||
|
if (!person->mail_begin || !person->mail_end ||
|
||||||
|
person->mail_begin == person->mail_end)
|
||||||
|
return 0; /* no usable mail */
|
||||||
|
if (!person->date_begin || !person->date_end ||
|
||||||
|
!person->tz_begin || !person->tz_end)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static void determine_author_info(struct strbuf *author_ident)
|
static void determine_author_info(struct strbuf *author_ident)
|
||||||
{
|
{
|
||||||
char *name, *email, *date;
|
char *name, *email, *date;
|
||||||
|
@ -530,7 +544,8 @@ static void determine_author_info(struct strbuf *author_ident)
|
||||||
if (force_date)
|
if (force_date)
|
||||||
date = force_date;
|
date = force_date;
|
||||||
strbuf_addstr(author_ident, fmt_ident(name, email, date, IDENT_STRICT));
|
strbuf_addstr(author_ident, fmt_ident(name, email, date, IDENT_STRICT));
|
||||||
if (!split_ident_line(&author, author_ident->buf, author_ident->len)) {
|
if (!split_ident_line(&author, author_ident->buf, author_ident->len) &&
|
||||||
|
sane_ident_split(&author)) {
|
||||||
export_one("GIT_AUTHOR_NAME", author.name_begin, author.name_end, 0);
|
export_one("GIT_AUTHOR_NAME", author.name_begin, author.name_end, 0);
|
||||||
export_one("GIT_AUTHOR_EMAIL", author.mail_begin, author.mail_end, 0);
|
export_one("GIT_AUTHOR_EMAIL", author.mail_begin, author.mail_end, 0);
|
||||||
export_one("GIT_AUTHOR_DATE", author.date_begin, author.tz_end, '@');
|
export_one("GIT_AUTHOR_DATE", author.date_begin, author.tz_end, '@');
|
||||||
|
|
|
@ -109,9 +109,9 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
|
||||||
PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN |
|
PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN |
|
||||||
PARSE_OPT_KEEP_DASHDASH);
|
PARSE_OPT_KEEP_DASHDASH);
|
||||||
|
|
||||||
argc = setup_revisions(argc, argv, rev, opt);
|
|
||||||
if (quiet)
|
if (quiet)
|
||||||
rev->diffopt.output_format |= DIFF_FORMAT_NO_OUTPUT;
|
rev->diffopt.output_format |= DIFF_FORMAT_NO_OUTPUT;
|
||||||
|
argc = setup_revisions(argc, argv, rev, opt);
|
||||||
|
|
||||||
/* Any arguments at this point are not recognized */
|
/* Any arguments at this point are not recognized */
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
|
|
|
@ -2038,7 +2038,7 @@ proc makewindow {} {
|
||||||
set file {
|
set file {
|
||||||
mc "File" cascade {
|
mc "File" cascade {
|
||||||
{mc "Update" command updatecommits -accelerator F5}
|
{mc "Update" command updatecommits -accelerator F5}
|
||||||
{mc "Reload" command reloadcommits -accelerator Meta1-F5}
|
{mc "Reload" command reloadcommits -accelerator Shift-F5}
|
||||||
{mc "Reread references" command rereadrefs}
|
{mc "Reread references" command rereadrefs}
|
||||||
{mc "List references" command showrefs -accelerator F2}
|
{mc "List references" command showrefs -accelerator F2}
|
||||||
{xx "" separator}
|
{xx "" separator}
|
||||||
|
@ -2495,7 +2495,7 @@ proc makewindow {} {
|
||||||
bindkey ? {dofind -1 1}
|
bindkey ? {dofind -1 1}
|
||||||
bindkey f nextfile
|
bindkey f nextfile
|
||||||
bind . <F5> updatecommits
|
bind . <F5> updatecommits
|
||||||
bind . <$M1B-F5> reloadcommits
|
bind . <Shift-F5> reloadcommits
|
||||||
bind . <F2> showrefs
|
bind . <F2> showrefs
|
||||||
bind . <Shift-F4> {newview 0}
|
bind . <Shift-F4> {newview 0}
|
||||||
catch { bind . <Shift-Key-XF86_Switch_VT_4> {newview 0} }
|
catch { bind . <Shift-Key-XF86_Switch_VT_4> {newview 0} }
|
||||||
|
@ -10599,7 +10599,7 @@ proc movedhead {hid head} {
|
||||||
}
|
}
|
||||||
|
|
||||||
proc changedrefs {} {
|
proc changedrefs {} {
|
||||||
global cached_dheads cached_dtags cached_atags
|
global cached_dheads cached_dtags cached_atags cached_tagcontent
|
||||||
global arctags archeads arcnos arcout idheads idtags
|
global arctags archeads arcnos arcout idheads idtags
|
||||||
|
|
||||||
foreach id [concat [array names idheads] [array names idtags]] {
|
foreach id [concat [array names idheads] [array names idtags]] {
|
||||||
|
@ -10611,6 +10611,7 @@ proc changedrefs {} {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch {unset cached_tagcontent}
|
||||||
catch {unset cached_dtags}
|
catch {unset cached_dtags}
|
||||||
catch {unset cached_atags}
|
catch {unset cached_atags}
|
||||||
catch {unset cached_dheads}
|
catch {unset cached_dheads}
|
||||||
|
@ -10663,7 +10664,7 @@ proc listrefs {id} {
|
||||||
}
|
}
|
||||||
|
|
||||||
proc showtag {tag isnew} {
|
proc showtag {tag isnew} {
|
||||||
global ctext tagcontents tagids linknum tagobjid
|
global ctext cached_tagcontent tagids linknum tagobjid
|
||||||
|
|
||||||
if {$isnew} {
|
if {$isnew} {
|
||||||
addtohistory [list showtag $tag 0] savectextpos
|
addtohistory [list showtag $tag 0] savectextpos
|
||||||
|
@ -10672,13 +10673,13 @@ proc showtag {tag isnew} {
|
||||||
clear_ctext
|
clear_ctext
|
||||||
settabs 0
|
settabs 0
|
||||||
set linknum 0
|
set linknum 0
|
||||||
if {![info exists tagcontents($tag)]} {
|
if {![info exists cached_tagcontent($tag)]} {
|
||||||
catch {
|
catch {
|
||||||
set tagcontents($tag) [exec git cat-file tag $tag]
|
set cached_tagcontent($tag) [exec git cat-file tag $tag]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if {[info exists tagcontents($tag)]} {
|
if {[info exists cached_tagcontent($tag)]} {
|
||||||
set text $tagcontents($tag)
|
set text $cached_tagcontent($tag)
|
||||||
} else {
|
} else {
|
||||||
set text "[mc "Tag"]: $tag\n[mc "Id"]: $tagids($tag)"
|
set text "[mc "Tag"]: $tag\n[mc "Id"]: $tagids($tag)"
|
||||||
}
|
}
|
||||||
|
|
6
ident.c
6
ident.c
|
@ -210,8 +210,10 @@ int split_ident_line(struct ident_split *split, const char *line, int len)
|
||||||
split->name_end = cp + 1;
|
split->name_end = cp + 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!split->name_end)
|
if (!split->name_end) {
|
||||||
return status;
|
/* no human readable name */
|
||||||
|
split->name_end = split->name_begin;
|
||||||
|
}
|
||||||
|
|
||||||
for (cp = split->mail_begin; cp < line + len; cp++)
|
for (cp = split->mail_begin; cp < line + len; cp++)
|
||||||
if (*cp == '>') {
|
if (*cp == '>') {
|
||||||
|
|
|
@ -25,4 +25,9 @@ test_expect_success POSIXPERM 'mktemp to unwritable directory prints filename' '
|
||||||
grep "cannotwrite/test" err
|
grep "cannotwrite/test" err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'check for a bug in the regex routines' '
|
||||||
|
# if this test fails, re-build git with NO_REGEX=1
|
||||||
|
test-regex
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
|
@ -108,4 +108,16 @@ test_expect_success 'showing range' '
|
||||||
test_cmp expect actual.filtered
|
test_cmp expect actual.filtered
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '-s suppresses diff' '
|
||||||
|
echo main3 >expect &&
|
||||||
|
git show -s --format=%s main3 >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success '--quiet suppresses diff' '
|
||||||
|
echo main3 >expect &&
|
||||||
|
git show --quiet --format=%s main3 >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
#include <git-compat-util.h>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
char *pat = "[^={} \t]+";
|
||||||
|
char *str = "={}\nfred";
|
||||||
|
regex_t r;
|
||||||
|
regmatch_t m[1];
|
||||||
|
|
||||||
|
if (regcomp(&r, pat, REG_EXTENDED | REG_NEWLINE))
|
||||||
|
die("failed regcomp() for pattern '%s'", pat);
|
||||||
|
if (regexec(&r, str, 1, m, 0))
|
||||||
|
die("no match of pattern '%s' to string '%s'", pat, str);
|
||||||
|
|
||||||
|
/* http://sourceware.org/bugzilla/show_bug.cgi?id=3957 */
|
||||||
|
if (m[0].rm_so == 3) /* matches '\n' when it should not */
|
||||||
|
die("regex bug confirmed: re-build git with NO_REGEX=1");
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
}
|
Loading…
Reference in New Issue