v1.1.1 bugfix
Rework two aspects of the logic for git repositories; both of these can
change behavior in some cases when printing status:
-
Determining whether the local checkout is in-sync with the expected
reference from the configuration file: Now we always convert the
expected reference to a hash and compare that with the
currently-checked-out hash. Previously, we sometimes did the
comparison using names, e.g., just ensuring that you're on the right
branch. -
Determining the current ref name (e.g., the branch or tag currently
checked out). Now we use a number of plumbing commands rather than
relying on regex parsing of 'git branch -vv'. The previous regex
parsing was fragile and hard to maintain, and was the source of a
number of bugs. In addition, differences between git v. 1 and git
v. 2 meant that the result was incorrect in some cases -
particularly, in the case where we have "detached from foo" (which is
the text that always appeared for a detached head in v 1, but in v 2
means we are no longer at foo).
This results in some subtle changes to status output. One particular
change is: If we're on a tracking branch, checkout_externals -S -v
will show the name of the local branch rather than the tracked
branch. (This is more accurate, because we may not actually be at the
head of the tracking branch.)
Also some other minor changes to documentation and running code coverage.