[GNC-dev] util/gnc-vcs-info fails if building from a Git worktree (with possible solution)
Kevin Buckley
kevin.m.buckley at gmail.com
Sun Jul 10 07:38:38 EDT 2022
I have recently discovered that
util/gnc-vcs-info
fails if building from a Git worktree.
Within gnc-vcs-info is this test
# Maybe it's git?
real_gitdir="${real_srcdir}"/.git
if test -d "${real_gitdir}"
then
...
however, if you have checked out a Git branch into a worktree,
then .git will be a file containing the string
gitdir: /path/to/main/working/tree/.git/worktrees/branchname
In order to allow gnc-vcs-info to "do the right thing" from
within a Git worktree, I'd suggest adding the following stanza
to gnc-vcs-info, which basically replicates the code from the
existing "Maybe it's git?" block, but allows for the fact that
you know it's a worktree
fi
fi
+# Maybe it's a git worktree?
+real_gitdir="${real_srcdir}"/.git
+if test -f "${real_gitdir}"
+then
+ worktrees=`grep worktrees ${real_gitdir}`
+ if test $? = 0 ; then
+
+ if [ "$request" = "type" ]
+ then
+ echo "git"
+ exit 0
+ fi
+
+ # The windows build uses environment variable $GIT_CMD to invoke
git (adding git
+ # to the PATH in Windows results in a build failure).
+ # So for platform independence, use GIT_CMD for all
+ [ -n "$GIT_CMD" ] || GIT_CMD=git
+ if [ "$request" = "date" ]
+ then
+ exec "$GIT_CMD" log -1 --format=%cd --date=short
+ exit 0
+ fi
+
+ githead=`"$GIT_CMD" log -1 --pretty=format:"%h" HEAD 2>/dev/null`
# short hash only
+ if test $? = 0 ; then
+ /bin/echo -n $githead
+ # Add a "+" to the hash if there deleted or modified files (not
excluded by .gitignore and friends)
+ # "Ignores" untracked files
+ # [ $("$GIT_CMD" ls-files -dkm 2>/dev/null | wc -l) -gt 0 ] &&
/bin/echo -n "+"
+ # Includes untracked files
+ [ $("$GIT_CMD" ls-files -dkmo --exclude-standard 2>/dev/null |
wc -l) -gt 0 ] && /bin/echo -n "+"
+ echo
+ exit 0
+ else
exit 1
+ fi
+
+ fi
+fi
+
if test -d "${real_srcdir}"/.bzr ;
then
# If we're only interested in the vcs type, then we're done here
or you might want to come up with something else to handle building
from a Git Worktree, in which case feel free to (ab)use the above as
you see fir.
HTH someone who tries to do what I was, when I discovered this
Kevin Buckley
More information about the gnucash-devel
mailing list