[git-buildpackage] gbp and git-worktrees

Guido Günther agx at sigxcpu.org
Fri Jan 12 08:56:02 CET 2018


Hi,
On Thu, Jan 11, 2018 at 01:24:07PM -0800, Nish Aravamudan wrote:
> Hi Guido,
> 
> Sorry for all the noise lately! Have another question for you:
> 
> In git-ubuntu, we are starting to heavily use git-worktrees, so that
> we can have temporary locations that checkout different
> commits/trees/etc than HEAD. This is very useful for us, e.g., when
> linting arbitrary commits without having to worry about restoring
> state in the cwd. In a recent change I am testing, we made it so that
> some of our gbp call paths also occur from a worktree.
> 
> However, it seems like gbp (at least gbp-buildpackage) does not like
> that too much :)
> 
> After doing some hacking on the snap's _check_repo, I see this:
> 
> ...
> 01/11/2018 13:15:11 - DEBUG:Executing: gbp buildpackage
> --git-builder=/bin/true --git-pristine-tar --git-ignore-branch
> '--git-upstream-tag=pkg/upstream/ubuntu/%(version)s.bz2'
> 01/11/2018 13:15:11 - ERROR:Command exited 1: gbp buildpackage
> --git-builder=/bin/true --git-pristine-tar --git-ignore-branch
> '--git-upstream-tag=pkg/upstream/ubuntu/%(version)s.bz2'
> 01/11/2018 13:15:11 - ERROR:stdout: path = .
>   abspath = /tmp/tmp2qsiies4
>   toplevel = False
>   out = b'/home/nacc/tmp/strongswan\n'
>   dummy = b''
>   ret = 0
>   cdup = /home/nacc/tmp/strongswan
>   path = .
>   abspath = /tmp/tmp2qsiies4
>   toplevel = True
>   out = b'/home/nacc/tmp/strongswan\n'
>   dummy = b''
>   ret = 0
>   cdup = /home/nacc/tmp/strongswan
> 
> 01/11/2018 13:15:11 - ERROR:stderr: gbp:error: /tmp/tmp2qsiies4 is not
> a git repository
>   Traceback (most recent call last):
>     File "/snap/git-ubuntu/x1/bin/gbp", line 11, in <module>
>       load_entry_point('gbp==0.9.6', 'console_scripts', 'gbp')()
>     File "/snap/git-ubuntu/x1/lib/python3.6/site-packages/gbp/scripts/supercommand.py",
> line 145, in supercommand
>       return module.main(args)
>     File "/snap/git-ubuntu/x1/lib/python3.6/site-packages/gbp/scripts/buildpackage.py",
> line 478, in main
>       repo = DebianGitRepository(os.path.curdir)
>     File "/snap/git-ubuntu/x1/lib/python3.6/site-packages/gbp/deb/git.py",
> line 41, in __init__
>       super(DebianGitRepository, self).__init__(*args, **kwargs)
>     File "/snap/git-ubuntu/x1/lib/python3.6/site-packages/gbp/pkg/git.py",
> line 36, in __init__
>       super(PkgGitRepository, self).__init__(*args, **kwargs)
>     File "/snap/git-ubuntu/x1/lib/python3.6/site-packages/gbp/git/repository.py",
> line 136, in __init__
>       self._path = self._check_repo(path, toplevel)
>     File "/snap/git-ubuntu/x1/lib/python3.6/site-packages/gbp/git/repository.py",
> line 119, in _check_repo
>       raise GitRepositoryError("Not the toplevel of a Git repository
> at '%s': '%s'" % (path, cdup))
>   gbp.git.repository.GitRepositoryError: Not the toplevel of a Git
> repository at '.': '/home/nacc/tmp/strongswan'
> 
> Which seems to me, that it's making what was a sensible error before
> worktrees were introduced, if I understand the code correctly. If we
> are intending to be invoked from the top level of a Git repository and
> cdup is non-empty, then we must not be at the top level of a Git
> repository? Except in the case of worktrees, I think, where we might
> be in a different directory than the Git directory -- but still have
> access to the samee
> 
> Does it make sense to perhaps change the condition in _check_repo that
> if the cdup is not an absolute path (starting with '/'?) that then the
> error condition is still true.

With these type of things it's usually best to provide steps to
reproduce so they can be turned into a testcase eventually. The
result might depend on your GIT_DIR and GIT_WORK_TREE settings.

Cheers,
 -- Guidox


More information about the git-buildpackage mailing list