From ccf5aa8dd3bc64837a4ca391d0b8bd0e3e481b7e Mon Sep 17 00:00:00 2001 From: Pavel Roskin Date: Tue, 13 Feb 2007 00:43:44 -0500 Subject: [PATCH 1/5] Clarify that git-update-server-info should be run for every git-push The old text suggested that git-update-server-info only needs to be run if new tags or branches are created, but not for new commits. Signed-off-by: Pavel Roskin Signed-off-by: Junio C Hamano --- Documentation/repository-layout.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Documentation/repository-layout.txt b/Documentation/repository-layout.txt index 863cb6710a..0459bd9ca1 100644 --- a/Documentation/repository-layout.txt +++ b/Documentation/repository-layout.txt @@ -133,14 +133,14 @@ info:: in this directory. info/refs:: - This file is to help dumb transports to discover what - refs are available in this repository. Whenever you - create/delete a new branch or a new tag, `git - update-server-info` should be run to keep this file - up-to-date if the repository is published for dumb - transports. The `git-receive-pack` command, which is - run on a remote repository when you `git push` into it, - runs `hooks/update` hook to help you achieve this. + This file helps dumb transports discover what refs are + available in this repository. If the repository is + published for dumb transports, this file should be + regenerated by `git update-server-info` every time a tag + or branch is created or modified. This is normally done + from the `hooks/update` hook, which is run by the + `git-receive-pack` command when you `git push` into the + repository. info/grafts:: This file records fake commit ancestry information, to From 7b3fab877d468a51bab6050385ab701697301c62 Mon Sep 17 00:00:00 2001 From: Michael Spang Date: Mon, 12 Feb 2007 19:33:37 -0500 Subject: [PATCH 2/5] Work around Subversion race in git-svn tests. Some of the git-svn tests can fail on fast machines due to a race in Subversion: if a file is modified in the same second it was checked out (or in for that matter), Subversion will not consider it modified. This works around the problem by increasing the timestamp by one second before each commit. [jc: with "touch -r -d" replacement from Eric] Acked-by: Eric Wong Signed-off-by: Michael Spang Signed-off-by: Junio C Hamano --- t/lib-git-svn.sh | 3 +++ t/t9101-git-svn-props.sh | 7 +++++-- t/t9103-git-svn-graft-branches.sh | 1 + t/t9104-git-svn-follow-parent.sh | 2 ++ t/t9106-git-svn-commit-diff-clobber.sh | 2 ++ 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/t/lib-git-svn.sh b/t/lib-git-svn.sh index bb1d7b84bc..67d08cf740 100644 --- a/t/lib-git-svn.sh +++ b/t/lib-git-svn.sh @@ -45,3 +45,6 @@ fi svnrepo="file://$svnrepo" +poke() { + perl -e '@x = stat($ARGV[0]); utime($x[8], $x[9] + 1, $ARGV[0])' "$1" +} diff --git a/t/t9101-git-svn-props.sh b/t/t9101-git-svn-props.sh index a2c4dc324a..e8133d81cb 100755 --- a/t/t9101-git-svn-props.sh +++ b/t/t9101-git-svn-props.sh @@ -56,11 +56,14 @@ test_expect_success 'checkout working copy from svn' "svn co $svnrepo test_wc" test_expect_success 'setup some commits to svn' \ 'cd test_wc && echo Greetings >> kw.c && + poke kw.c && svn commit -m "Not yet an Id" && echo Hello world >> kw.c && + poke kw.c && svn commit -m "Modified file, but still not yet an Id" && svn propset svn:keywords Id kw.c && - svn commit -m "Propset Id" + poke kw.c && + svn commit -m "Propset Id" && cd ..' test_expect_success 'initialize git-svn' "git-svn init $svnrepo" @@ -83,7 +86,7 @@ test_expect_success "propset CR on crlf files" \ svn propset svn:eol-style CR empty && svn propset svn:eol-style CR crlf && svn propset svn:eol-style CR ne_crlf && - svn commit -m "propset CR on crlf files" + svn commit -m "propset CR on crlf files" && cd ..' test_expect_success 'fetch and pull latest from svn and checkout a new wc' \ diff --git a/t/t9103-git-svn-graft-branches.sh b/t/t9103-git-svn-graft-branches.sh index 4e55778a47..183ae3b1c2 100755 --- a/t/t9103-git-svn-graft-branches.sh +++ b/t/t9103-git-svn-graft-branches.sh @@ -16,6 +16,7 @@ test_expect_success 'initialize repo' " svn co $svnrepo wc && cd wc && echo feedme >> branches/a/readme && + poke branches/a/readme && svn commit -m hungry && cd trunk && svn merge -r3:4 $svnrepo/branches/a && diff --git a/t/t9104-git-svn-follow-parent.sh b/t/t9104-git-svn-follow-parent.sh index 8d2e2fec39..405b555368 100755 --- a/t/t9104-git-svn-follow-parent.sh +++ b/t/t9104-git-svn-follow-parent.sh @@ -16,11 +16,13 @@ test_expect_success 'initialize repo' " svn co $svnrepo wc && cd wc && echo world >> trunk/readme && + poke trunk/readme && svn commit -m 'another commit' && svn up && svn mv -m 'rename to thunk' trunk thunk && svn up && echo goodbye >> thunk/readme && + poke thunk/readme && svn commit -m 'bye now' && cd .. " diff --git a/t/t9106-git-svn-commit-diff-clobber.sh b/t/t9106-git-svn-commit-diff-clobber.sh index 59b6425ce4..6f132f2419 100755 --- a/t/t9106-git-svn-commit-diff-clobber.sh +++ b/t/t9106-git-svn-commit-diff-clobber.sh @@ -18,6 +18,7 @@ test_expect_success 'commit change from svn side' " svn co $svnrepo t.svn && cd t.svn && echo second line from svn >> file && + poke file && svn commit -m 'second line from svn' && cd .. && rm -rf t.svn @@ -45,6 +46,7 @@ test_expect_failure 'dcommit fails to commit because of conflict' " svn co $svnrepo t.svn && cd t.svn && echo fourth line from svn >> file && + poke file && svn commit -m 'fourth line from svn' && cd .. && rm -rf t.svn && From 25b51e2c7f6fd220cee2a363297b04a246143372 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 12 Feb 2007 23:06:54 -0800 Subject: [PATCH 3/5] Do not forget to pack objects reachable from HEAD reflog. Similar to commit eb8381c8, we need to use for_each_reflog() to make sure we do not miss objects reachable from HEAD reflog. Signed-off-by: Junio C Hamano --- revision.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/revision.c b/revision.c index 5bcd155e21..15bdaf6095 100644 --- a/revision.c +++ b/revision.c @@ -532,7 +532,7 @@ static void handle_reflog(struct rev_info *revs, unsigned flags) struct all_refs_cb cb; cb.all_revs = revs; cb.all_flags = flags; - for_each_ref(handle_one_reflog, &cb); + for_each_reflog(handle_one_reflog, &cb); } static int add_parents_only(struct rev_info *revs, const char *arg, int flags) From acb39f64c6f5f0a3220da787fda9badad9f57554 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 12 Feb 2007 23:21:34 -0800 Subject: [PATCH 4/5] for-each-reflog: not having $GIT_DIR/logs directory is not an error. Signed-off-by: Junio C Hamano --- refs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refs.c b/refs.c index 9e3dfb3c97..6387703789 100644 --- a/refs.c +++ b/refs.c @@ -1251,7 +1251,7 @@ static int do_for_each_reflog(const char *base, each_ref_fn fn, void *cb_data) free(log); closedir(dir); } - else + else if (*base) return errno; return retval; } From 85b1f98871f19617ff7ee8ec245fe4e817a74aa4 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 11 Feb 2007 13:41:23 -0800 Subject: [PATCH 5/5] "git-fetch --tags $URL" should not overwrite existing tags Use the same --exclude-existing filter as we use for automatic tag following to avoid overwriting existing tags with replacement ones the other side created. Signed-off-by: Junio C Hamano --- git-fetch.sh | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/git-fetch.sh b/git-fetch.sh index 357cac28b2..ca984e739a 100755 --- a/git-fetch.sh +++ b/git-fetch.sh @@ -253,23 +253,10 @@ if test "$tags" then taglist=`IFS=' ' && echo "$ls_remote_result" | + git-show-ref --exclude-existing=refs/tags/ | while read sha1 name do - case "$sha1" in - fail) - exit 1 - esac - case "$name" in - *^*) continue ;; - refs/tags/*) ;; - *) continue ;; - esac - if git-check-ref-format "$name" - then - echo ".${name}:${name}" - else - echo >&2 "warning: tag ${name} ignored" - fi + echo ".${name}:${name}" done` || exit if test "$#" -gt 1 then