Merge branch 'master' into next

* master:
  Git 1.7.2-rc2
  backmerge a few more fixes to 1.7.1.X series
  rev-parse: fix --parse-opt --keep-dashdash --stop-at-non-option
  fix git branch -m in presence of cross devices
  t/t0006: specify timezone as EST5 not EST to comply with POSIX
This commit is contained in:
Junio C Hamano
2010-07-07 11:20:37 -07:00
6 changed files with 59 additions and 23 deletions

View File

@@ -0,0 +1,19 @@
Git v1.7.1.2 Release Notes
==========================
Fixes since v1.7.1.1
--------------------
* "git commit" did not honor GIT_REFLOG_ACTION environment variable, resulting
reflog messages for cherry-pick and revert actions to be recorded as "commit".
* "git clone/fetch/pull" issued an incorrect error message when a ref and
a symref that points to the ref were updated at the same time. This
obviously would update them to the same value, and should not result in
an error condition.
* "git diff" inside a tree with many pathnames that have certain
characters has become very slow in 1.7.0 by mistake.
* "git rev-parse --parseopt --stop-at-non-option" did not stop at non option
when --keep-dashdash was in effect.

View File

@@ -121,6 +121,8 @@ Updates since v1.7.1
highlighting, "plackup" support for instaweb, .fcgi suffix to run
it as FastCGI script, etc.
* The test harness has been updated to produce TAP-friendly output.
Fixes since v1.7.1
------------------
@@ -129,23 +131,11 @@ All of the fixes in v1.7.1.X maintenance series are included in this
release, unless otherwise noted.
* We didn't URL decode "file:///path/to/repo" correctly when path/to/repo
had percent-encoded characters (638794c, 9d2e942).
* "git commit" did not honor GIT_REFLOG_ACTION environment variable, resulting
reflog messages for cherry-pick and revert actions to be recorded as "commit".
* "git clone/fetch/pull" issued an incorrect error message when a ref and
a symref that points to the ref were updated at the same time. This
obviously would update them to the same value, and should not result in
an error condition (0e71bc3).
had percent-encoded characters (638794c, 9d2e942, ce83eda, 3c73a1d).
* "git clone" did not configure remote.origin.url correctly for bare
clones (df61c889).
* "git diff" inside a tree with many pathnames that have certain
characters has become very slow in 1.7.0 by mistake (will merge
e53e6b443 to 'maint').
* "git diff --graph" works better with "--color-words" and other options
(81fa024..4297c0a).
@@ -157,6 +147,6 @@ release, unless otherwise noted.
--
exec >/var/tmp/1
O=v1.7.2-rc0-60-g2927a50
O=v1.7.2-rc1-37-g2a16315
echo O=$(git describe HEAD)
git shortlog --no-merges HEAD ^maint ^$O

View File

@@ -407,8 +407,8 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)
ALLOC_GROW(opts, onb + 1, osz);
memset(opts + onb, 0, sizeof(opts[onb]));
argc = parse_options(argc, argv, prefix, opts, usage,
keep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0 |
stop_at_non_option ? PARSE_OPT_STOP_AT_NON_OPTION : 0 |
(keep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0) |
(stop_at_non_option ? PARSE_OPT_STOP_AT_NON_OPTION : 0) |
PARSE_OPT_SHELL_EVAL);
strbuf_addf(&parsed, " --");

21
refs.c
View File

@@ -1090,6 +1090,15 @@ int delete_ref(const char *refname, const unsigned char *sha1, int delopt)
return ret;
}
/*
* People using contrib's git-new-workdir have .git/logs/refs ->
* /some/other/path/.git/logs/refs, and that may live on another device.
*
* IOW, to avoid cross device rename errors, the temporary renamed log must
* live into logs/refs.
*/
#define TMP_RENAMED_LOG "logs/refs/.tmp-renamed-log"
int rename_ref(const char *oldref, const char *newref, const char *logmsg)
{
static const char renamed_ref[] = "RENAMED-REF";
@@ -1123,8 +1132,8 @@ int rename_ref(const char *oldref, const char *newref, const char *logmsg)
if (write_ref_sha1(lock, orig_sha1, logmsg))
return error("unable to save current sha1 in %s", renamed_ref);
if (log && rename(git_path("logs/%s", oldref), git_path("tmp-renamed-log")))
return error("unable to move logfile logs/%s to tmp-renamed-log: %s",
if (log && rename(git_path("logs/%s", oldref), git_path(TMP_RENAMED_LOG)))
return error("unable to move logfile logs/%s to "TMP_RENAMED_LOG": %s",
oldref, strerror(errno));
if (delete_ref(oldref, orig_sha1, REF_NODEREF)) {
@@ -1150,7 +1159,7 @@ int rename_ref(const char *oldref, const char *newref, const char *logmsg)
}
retry:
if (log && rename(git_path("tmp-renamed-log"), git_path("logs/%s", newref))) {
if (log && rename(git_path(TMP_RENAMED_LOG), git_path("logs/%s", newref))) {
if (errno==EISDIR || errno==ENOTDIR) {
/*
* rename(a, b) when b is an existing
@@ -1163,7 +1172,7 @@ int rename_ref(const char *oldref, const char *newref, const char *logmsg)
}
goto retry;
} else {
error("unable to move logfile tmp-renamed-log to logs/%s: %s",
error("unable to move logfile "TMP_RENAMED_LOG" to logs/%s: %s",
newref, strerror(errno));
goto rollback;
}
@@ -1203,8 +1212,8 @@ int rename_ref(const char *oldref, const char *newref, const char *logmsg)
error("unable to restore logfile %s from %s: %s",
oldref, newref, strerror(errno));
if (!logmoved && log &&
rename(git_path("tmp-renamed-log"), git_path("logs/%s", oldref)))
error("unable to restore logfile %s from tmp-renamed-log: %s",
rename(git_path(TMP_RENAMED_LOG), git_path("logs/%s", oldref)))
error("unable to restore logfile %s from "TMP_RENAMED_LOG": %s",
oldref, strerror(errno));
return 1;

View File

@@ -39,7 +39,7 @@ check_parse 2008-02 bad
check_parse 2008-02-14 bad
check_parse '2008-02-14 20:30:45' '2008-02-14 20:30:45 +0000'
check_parse '2008-02-14 20:30:45 -0500' '2008-02-14 20:30:45 -0500'
check_parse '2008-02-14 20:30:45' '2008-02-14 20:30:45 -0500' EST
check_parse '2008-02-14 20:30:45' '2008-02-14 20:30:45 -0500' EST5
check_approxidate() {
echo "$1 -> $2 +0000" >expect

View File

@@ -81,4 +81,22 @@ test_expect_success 'test --parseopt --keep-dashdash' '
test_cmp expect output
'
cat >expect <<EOF
set -- --foo -- '--' 'arg' '--spam=ham'
EOF
test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option with --' '
git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo -- arg --spam=ham <optionspec >output &&
test_cmp expect output
'
cat > expect <<EOF
set -- --foo -- 'arg' '--spam=ham'
EOF
test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option without --' '
git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo arg --spam=ham <optionspec >output &&
test_cmp expect output
'
test_done