[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