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

Re: [PATCH v5 1/2] branch: not report invalid tracking branch

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 14, 2013, 15:38 UTC
Message-ID
<7vbo50uvty.fsf@alter.siamese.dyndns.org>
In-Reply-To
<96e0ed4f67eaf058466ead9228cad0dcfe1b5c6a.1376369554.git.worldhello.net@gmail.com>
Jiang Xin <worldhello.net@gmail.com> writes:
Show 5 quoted lines
> Command "git branch -vv" will report tracking branches, but invalid
> tracking branches are also reported. This is because the function
> stat_tracking_info() can not distinguish whether the upstream branch
> does not exist, or nothing is changed between one branch and its
> upstream.

I am guessing that by "invalid", you used to have another branch (possibly a remote one) you built a branch on (hence the upstream of the latter is set to the former) and the former branch no longer exists.

Shouldn't that case reported a bit more specially?  After doing this:
	git init
        git commit --allow-empty -m initial ;# on master
        git branch topicbase
        git checkout -t -b topic topicbase
        git commit --allow-empty -m topic ;# on topic
        git branch -d topicbase

the branch "topic" _thinks_ it is still based on "topicbase", but of course "git log @{u}.." will fail.

A few thought-alouds:
 - Perhaps "git branch -d topicbase" should have warned that there
   are some branches that are based on it?  Should it have failed?
   Or should it automatically removed branch.*.merge entries that
   point at it (while warning)?
 - The operation that removes the @{u} of some branch does not have
   to be "git branch -d".  It could be "remote --prune", and it does
   not make much sense to fail that operation, as what is gone from
   the other side is gone, and the point of having remote tracking
   branches is to keep a faithful copy of the observed status of the
   remote.  It implies that failing "git branch -d topicbase" is not
   a good idea.  Also removing the branch.*.merge automatically is
   probably not what the user wants (at least, the name would hint
   something, even after the topicbase branch is gone).

So "git branch -v -v [topic]" would want to still say that topic is based on topicbranch, even though the latter is gone and there is no longer a real "building on" relationship.

E.g. before "git branch -d topicbase" we would see something like:
    $ git branch -v -v
      master    e67ac84 initial
    * topic     3fc0f2a [topicbase: ahead 1] topic
      topicbase e67ac84 [master] initial
and after it, we currently see:
    $ git branch -v -v
      master    e67ac84 initial
    * topic     3fc0f2a [topicbase] topic
      topicbase e67ac84 [master] initial
but we may want to say:
    $ git branch -v -v
      master    e67ac84 initial
    * topic     3fc0f2a [topicbase (gone)] topic
      topicbase e67ac84 [master] initial
or something.

In order to distinguish these three cases (i.e. no tracking, with configured but no longer valid tracking, and with tracking), you would need more than true/false.

> This patch changes the return value of function stat_tracking_info().
> Only returns false when there is no tracking branch or the tracking
> branch is invalid, otherwise true.

Instead, you would need -1 (with "gone" base), 0 (no base), 1 (with base).

This is a tangent, but we might want to rename stat_tracking_info(). A branch A building on top of another branch B does not mean A "tracks" B. The wording is a source of confusion.

Previous: Jiang XinNext: Jiang Xin
Message 15 of 36 in “[RFC] status: show tracking branch even no difference”
  1. Jiang XinAug 7, 2013
  2. Matthieu MoyAug 7, 2013
  3. Jiang XinAug 7, 2013
  4. status: always show tracking branch even no changeJiang Xin, Aug 8, 2013
  5. status: always show tracking branch even no changeJiang Xin, Aug 8, 2013
  6. status: always show tracking branch even no changeJiang Xin, Aug 8, 2013
  7. Junio C HamanoAug 9, 2013
  8. Jiang XinAug 10, 2013
  9. Junio C HamanoAug 12, 2013
  10. Jiang XinAug 13, 2013
  11. 1/2 branch: not report invalid tracking branchJiang Xin, Aug 13, 2013
  12. 2/2 status: always show tracking branch even no changeJiang Xin, Aug 13, 2013
  13. Junio C HamanoAug 14, 2013
  14. Jiang XinAug 15, 2013
  15. Junio C HamanoAug 14, 2013
  16. 1/3 branch: not report invalid tracking branchJiang Xin, Aug 15, 2013
  17. 2/3 branch: report invalid tracking branch as brokenJiang Xin, Aug 15, 2013
  18. Junio C HamanoAug 15, 2013
  19. Junio C HamanoAug 15, 2013
  20. 0/3 some enhancements for reporting branch tracking infoJiang Xin, Aug 16, 2013
  21. 1/3 branch: not report invalid tracking branchJiang Xin, Aug 16, 2013
  22. 2/3 branch: mark missing tracking branch as goneJiang Xin, Aug 16, 2013
  23. Matthieu MoyAug 21, 2013
  24. Jiang XinAug 22, 2013
  25. 3/3 status: always show tracking branch even no changeJiang Xin, Aug 16, 2013
  26. Junio C HamanoAug 18, 2013
  27. Jiang XinAug 19, 2013
  28. 0/2 some enhancements for reporting branch tracking infoJiang Xin, Aug 26, 2013
  29. 1/2 branch: report invalid tracking branch as goneJiang Xin, Aug 26, 2013
  30. 2/2 status: always show tracking branch even no changeJiang Xin, Aug 26, 2013
  31. Jeremy RosenAug 26, 2013
  32. Jiang XinAug 26, 2013
  33. Junio C HamanoAug 26, 2013
  34. Junio C HamanoAug 26, 2013
  35. 3/3 status: always show tracking branch even no changeJiang Xin, Aug 15, 2013
  36. Junio C HamanoAug 15, 2013

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.