git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: branch.<branch>.merge and --format='%(upstream)'

From
SBSanti Béjar <santi@agolina.net>
Date
Jun 18, 2009, 07:57 UTC
Message-ID
<1245311834-5290-3-git-send-email-santi@agolina.net>
In-Reply-To
<1245311834-5290-1-git-send-email-santi@agolina.net>
2009/6/16 Junio C Hamano <gitster@pobox.com>
Show 19 quoted lines
>
> Jeff King <peff@peff.net> writes:
>
> > On Tue, Jun 16, 2009 at 01:08:02PM +0200, Santi Béjar wrote:
> >
> >>   I've noticed that having branch.<branch>.merge set with the branch
> >> name, and not with the full ref, cause problems with
> >> --format='%(upstream)'  and also with the "branch -av" and "git
> >> status" upstream branch outputs. But git-fetch and git-pull works ok,
> >> so it is a valid setting.
> >
> > Actually, it is broken in a lot of places. for-each-ref relies on the
> > same code as "git status", "git checkout", etc, which will all fail to
> > display tracking info. I believe the same code is also used for updating
> > tracking branches on push. So I'm not sure if it was ever intended to be
> > a valid setting.
>
> It wasn't.  Some places may accept them gracefully by either being extra
> nice or by accident.

And what about the comments in my reply. And in the branch.<name>.merge docs says: The value is handled like the remote part of a refspec.

In fact I found it trying to implement a patch to get the local tracking for a given remote and branch. But it only works if you spell the branch with its full form:

$ git remote tracking origin master # does not work $ git remote tracking origin refs/heads/master # does work refs/remotes/origin/master

so I thought it would be better to resolve the %(upstream) first.
So if you know how to resolve this and or the %(upstream) issue, please tell me.

Anyway, here you have the WIP patch to get the tracking branch, I'm not sure about the UI (or the script interface?), it is also a RFC.

---8<----
Subject: [RFC/PATCH]: Output tracking branch from remote and branch
---
Hi,
  as said above it is a RFC, specially for the UI, and also can anyone help
me with the:
$ git remote tracking origin master # does not work
case?

Thanks, Santi

P.D: This case will be used in the "git pull --rebase remote branch" case.
 builtin-remote.c |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/builtin-remote.c b/builtin-remote.c
index 709f8a6..03bcc27 100644
--- a/builtin-remote.c
+++ b/builtin-remote.c
@@ -665,6 +665,38 @@ static int remove_branches(struct string_list *branches)
 	return result;
 }
 
+static int tracking(int argc, const char **argv)
+{
+	struct option options[] = {
+		OPT_END()
+	};
+	struct remote *remote;
+	static const char **refs = NULL;
+	int ref_nr = 0;
+	int i = 0;
+	struct refspec *refspec;
+
+	if (argc < 3)
+		usage_with_options(builtin_remote_usage, options);
+	remote = remote_get(argv[1]);
+	if (!remote)
+		die("No such remote: %s", argv[1]);
+	refs = xcalloc(argc + 1, sizeof(const char *));
+	for (i = 2; i < argc; i++) {
+		refs[ref_nr++] = argv[i];
+	}
+	refs[ref_nr] = NULL;
+	memset(&refspec, 0, sizeof(*refspec));
+	refspec = parse_fetch_refspec(ref_nr, refs);
+	for (i = 0; i < ref_nr ; i++) {
+		if (!remote_find_tracking(remote, &refspec[i]))
+			printf("%s\n", refspec[i].dst);
+		else
+			return 1;
+	}
+	return 0;
+}
+
 static int rm(int argc, const char **argv)
 {
 	struct option options[] = {
@@ -1348,6 +1380,8 @@ int cmd_remote(int argc, const char **argv, const char *prefix)
 		result = show_all();
 	else if (!strcmp(argv[0], "add"))
 		result = add(argc, argv);
+	else if (!strcmp(argv[0], "tracking"))
+		result = tracking(argc, argv);
 	else if (!strcmp(argv[0], "rename"))
 		result = mv(argc, argv);
 	else if (!strcmp(argv[0], "rm"))
-- 
1.6.3.2.406.gd6a466
Previous: Santi BéjarNext: Santi Béjar
Message 14 of 19 in “Support for arbitrary mapping for "git pull --rebase"”
  1. 0/2 Support for arbitrary mapping for "git pull --rebase"Santi Béjar, Jun 18, 2009
  2. 1/2 remote tracking: return the tracking branch for the given branchesSanti Béjar, Jun 18, 2009
  3. Paolo BonziniJun 18, 2009
  4. Santi BéjarJun 18, 2009
  5. Johannes SchindelinJun 18, 2009
  6. Santi BéjarJun 18, 2009
  7. Jakub NarebskiJun 18, 2009
  8. Santi BéjarJun 18, 2009
  9. Jakub NarebskiJun 18, 2009
  10. Santi BéjarJun 18, 2009
  11. Santi BéjarJun 18, 2009
  12. Junio C HamanoJun 18, 2009
  13. Santi BéjarJun 18, 2009
  14. Santi BéjarJun 18, 2009
  15. 2/2 get_remote_merge_branch: Support for arbitrary mappingSanti Béjar, Jun 18, 2009
  16. Santi BéjarJun 18, 2009
  17. Johannes SchindelinJun 18, 2009
  18. Santi BéjarJun 18, 2009
  19. Santi BéjarJun 19, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.