Skip to content

Commit

Permalink
Merge branch 'mk/maint-cg-push' into maint
Browse files Browse the repository at this point in the history
* mk/maint-cg-push:
  git push: Interpret $GIT_DIR/branches in a Cogito compatible way
  • Loading branch information
Junio C Hamano committed Dec 1, 2008
2 parents 16d2583 + 18afe10 commit 270c354
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 5 deletions.
19 changes: 14 additions & 5 deletions Documentation/urls-remotes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,22 @@ This file should have the following format:
------------

`<url>` is required; `#<head>` is optional.
When you do not provide a refspec on the command line,
git will use the following refspec, where `<head>` defaults to `master`,
and `<repository>` is the name of this file
you provided in the command line.

Depending on the operation, git will use one of the following
refspecs, if you don't provide one on the command line.
`<branch>` is the name of this file in `$GIT_DIR/branches` and
`<head>` defaults to `master`.

git fetch uses:

------------
refs/heads/<head>:refs/heads/<branch>
------------

git push uses:

------------
refs/heads/<head>:<repository>
HEAD:refs/heads/<head>
------------


Expand Down
11 changes: 11 additions & 0 deletions remote.c
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,17 @@ static void read_branches_file(struct remote *remote)
}
add_url_alias(remote, p);
add_fetch_refspec(remote, strbuf_detach(&branch, 0));
/*
* Cogito compatible push: push current HEAD to remote #branch
* (master if missing)
*/
strbuf_init(&branch, 0);
strbuf_addstr(&branch, "HEAD");
if (frag)
strbuf_addf(&branch, ":refs/heads/%s", frag);
else
strbuf_addstr(&branch, ":refs/heads/master");
add_push_refspec(remote, strbuf_detach(&branch, 0));
remote->fetch_tags = 1; /* always auto-follow */
}

Expand Down
50 changes: 50 additions & 0 deletions t/t5516-fetch-push.sh
Original file line number Diff line number Diff line change
Expand Up @@ -494,4 +494,54 @@ test_expect_success 'allow deleting an invalid remote ref' '
'

test_expect_success 'fetch with branches' '
mk_empty &&
git branch second $the_first_commit &&
git checkout second &&
echo ".." > testrepo/.git/branches/branch1 &&
(cd testrepo &&
git fetch branch1 &&
r=$(git show-ref -s --verify refs/heads/branch1) &&
test "z$r" = "z$the_commit" &&
test 1 = $(git for-each-ref refs/heads | wc -l)
) &&
git checkout master
'

test_expect_success 'fetch with branches containing #' '
mk_empty &&
echo "..#second" > testrepo/.git/branches/branch2 &&
(cd testrepo &&
git fetch branch2 &&
r=$(git show-ref -s --verify refs/heads/branch2) &&
test "z$r" = "z$the_first_commit" &&
test 1 = $(git for-each-ref refs/heads | wc -l)
) &&
git checkout master
'

test_expect_success 'push with branches' '
mk_empty &&
git checkout second &&
echo "testrepo" > .git/branches/branch1 &&
git push branch1 &&
(cd testrepo &&
r=$(git show-ref -s --verify refs/heads/master) &&
test "z$r" = "z$the_first_commit" &&
test 1 = $(git for-each-ref refs/heads | wc -l)
)
'

test_expect_success 'push with branches containing #' '
mk_empty &&
echo "testrepo#branch3" > .git/branches/branch2 &&
git push branch2 &&
(cd testrepo &&
r=$(git show-ref -s --verify refs/heads/branch3) &&
test "z$r" = "z$the_first_commit" &&
test 1 = $(git for-each-ref refs/heads | wc -l)
) &&
git checkout master
'

test_done

0 comments on commit 270c354

Please sign in to comment.