Merge branch 'mb/fetch-call-a-non-branch-a-ref' into maint
The report from "git fetch" said "new branch" even for a non branch ref. By Marc Branchaud * mb/fetch-call-a-non-branch-a-ref: fetch: describe new refs based on where it came from fetch: Give remote_ref to update_local_ref() as wellmaint
commit
66bca3f722
|
@ -240,6 +240,7 @@ static int s_update_ref(const char *action,
|
||||||
|
|
||||||
static int update_local_ref(struct ref *ref,
|
static int update_local_ref(struct ref *ref,
|
||||||
const char *remote,
|
const char *remote,
|
||||||
|
const struct ref *remote_ref,
|
||||||
struct strbuf *display)
|
struct strbuf *display)
|
||||||
{
|
{
|
||||||
struct commit *current = NULL, *updated;
|
struct commit *current = NULL, *updated;
|
||||||
|
@ -293,13 +294,21 @@ static int update_local_ref(struct ref *ref,
|
||||||
const char *msg;
|
const char *msg;
|
||||||
const char *what;
|
const char *what;
|
||||||
int r;
|
int r;
|
||||||
if (!strncmp(ref->name, "refs/tags/", 10)) {
|
/*
|
||||||
|
* Nicely describe the new ref we're fetching.
|
||||||
|
* Base this on the remote's ref name, as it's
|
||||||
|
* more likely to follow a standard layout.
|
||||||
|
*/
|
||||||
|
const char *name = remote_ref ? remote_ref->name : "";
|
||||||
|
if (!prefixcmp(name, "refs/tags/")) {
|
||||||
msg = "storing tag";
|
msg = "storing tag";
|
||||||
what = _("[new tag]");
|
what = _("[new tag]");
|
||||||
}
|
} else if (!prefixcmp(name, "refs/heads/")) {
|
||||||
else {
|
|
||||||
msg = "storing head";
|
msg = "storing head";
|
||||||
what = _("[new branch]");
|
what = _("[new branch]");
|
||||||
|
} else {
|
||||||
|
msg = "storing ref";
|
||||||
|
what = _("[new ref]");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
|
if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
|
||||||
|
@ -466,7 +475,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
|
||||||
|
|
||||||
strbuf_reset(¬e);
|
strbuf_reset(¬e);
|
||||||
if (ref) {
|
if (ref) {
|
||||||
rc |= update_local_ref(ref, what, ¬e);
|
rc |= update_local_ref(ref, what, rm, ¬e);
|
||||||
free(ref);
|
free(ref);
|
||||||
} else
|
} else
|
||||||
strbuf_addf(¬e, "* %-*s %-*s -> FETCH_HEAD",
|
strbuf_addf(¬e, "* %-*s %-*s -> FETCH_HEAD",
|
||||||
|
|
|
@ -162,6 +162,36 @@ test_expect_success 'fetch following tags' '
|
||||||
|
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'fetch uses remote ref names to describe new refs' '
|
||||||
|
cd "$D" &&
|
||||||
|
git init descriptive &&
|
||||||
|
(
|
||||||
|
cd descriptive &&
|
||||||
|
git config remote.o.url .. &&
|
||||||
|
git config remote.o.fetch "refs/heads/*:refs/crazyheads/*" &&
|
||||||
|
git config --add remote.o.fetch "refs/others/*:refs/heads/*" &&
|
||||||
|
git fetch o
|
||||||
|
) &&
|
||||||
|
git tag -a -m "Descriptive tag" descriptive-tag &&
|
||||||
|
git branch descriptive-branch &&
|
||||||
|
git checkout descriptive-branch &&
|
||||||
|
echo "Nuts" >crazy &&
|
||||||
|
git add crazy &&
|
||||||
|
git commit -a -m "descriptive commit" &&
|
||||||
|
git update-ref refs/others/crazy HEAD &&
|
||||||
|
(
|
||||||
|
cd descriptive &&
|
||||||
|
git fetch o 2>actual &&
|
||||||
|
grep " -> refs/crazyheads/descriptive-branch$" actual |
|
||||||
|
test_i18ngrep "new branch" &&
|
||||||
|
grep " -> descriptive-tag$" actual |
|
||||||
|
test_i18ngrep "new tag" &&
|
||||||
|
grep " -> crazy$" actual |
|
||||||
|
test_i18ngrep "new ref"
|
||||||
|
) &&
|
||||||
|
git checkout master
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'fetch must not resolve short tag name' '
|
test_expect_success 'fetch must not resolve short tag name' '
|
||||||
|
|
||||||
cd "$D" &&
|
cd "$D" &&
|
||||||
|
|
Loading…
Reference in New Issue