On Mon, Jan 19 2015, "W. Trevor King" <wking at tremily.us> wrote:
> For folks that want to start versioning a new tag-space, instead of > cloning one that someone else has already started. > > The empty-blob hash-object call avoids errors like: > > $ nmbug commit > error: invalid object 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 for > 'tags/...' > fatal: git-write-tree: error building trees > 'git HASH(0x9ef3eb8) write-tree' exited with nonzero value > > David Bremner suggested [1]: > > $ git hash-object -w /dev/null > > instead of my Python version of: > > $ git hash-object -w --stdin <&- > > but I expect that closing stdin is more portable than the /dev/null > path (which doesn't exist on Windows, for example). I agree with this... I attempted to try this (being stup^H^H^H^Hadventurous and not backupping ~/.nmbug -- should the existence be checked first ???) and got the following ;/ $ python2.7 devel/nmbug/nmbug init Reinitialized existing Git repository in /home/too/.nmbug/ e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 user.name not defined [u'git', u'--git-dir', u'/home/too/.nmbug', u'commit', u'--allow-empty', u'-m', u'Start a new nmbug repository'] exited with 1 zsh: exit 1 python2.7 devel/nmbug/nmbug init This is due to my default /path/to/git-templates/pre-commit forbidding commits unless I've configured user.name & user.email for that particular repository.... I guess there is not much one can do to handle users' mystic global hooks -- I'll look (later) whether e.g. '--no-hooks' parameter could be given to nmbug from command line... ... Ok, it was --no-verify and patching that to the command line worked -- git complained that "Your name and email address were configured automatically based on your username and hostname..." but commit succeeded :). ... but Now I issued nmbug init twice. now there are 2 Start a new nmbug repository commits. I think it should be checked so that init on already-existing repository does not succeed. Tomi > > The --bare init and use of NMBGIT as the work tree (what could go > wrong with an empty commit?) are suggestions from Michal Sojka [2]. > > [1]: id:87y4vu6uvf.fsf at maritornes.cs.unb.ca > http://thread.gmane.org/gmane.mail.notmuch.general/18626/focus=18720 > [2]: id:87a93a5or2.fsf at resox.2x.cz > http://thread.gmane.org/gmane.mail.notmuch.general/19495/focus=19767 > --- > Since v3 [1] I've incorporated Michal's suggestions [2]: > > * Start with 'git --git-dir {NMBGIT} init --bare > * Use NMBGIT instead of a temporary workdir when creating the initial > ?Start a new nmbug repository? commit. > > As well as the core.logallrefupdates tweak I turned up in testing [3]. > > [1]: id:113512958b3fd64902517c1c55576faef816f852.1414532174.git.wking at > tremily.us > http://thread.gmane.org/gmane.mail.notmuch.general/19495 > [2]: id:87a93a5or2.fsf at resox.2x.cz > http://thread.gmane.org/gmane.mail.notmuch.general/19495/focus=19767 > [3]: id:20141129201829.GI4062 at odin.tremily.us > http://thread.gmane.org/gmane.mail.notmuch.general/19495/focus=19774 > > devel/nmbug/nmbug | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/devel/nmbug/nmbug b/devel/nmbug/nmbug > index 932ec12..1297345 100755 > --- a/devel/nmbug/nmbug > +++ b/devel/nmbug/nmbug > @@ -374,6 +374,25 @@ def fetch(remote=None): > _git(args=args, wait=True) > > > +def init(remote=None): > + """ > + Create an empty nmbug repository. > + > + This wraps 'git init' with a few extra steps to support subsequent > + status and commit commands. > + """ > + _spawn(args=['git', '--git-dir', NMBGIT, 'init', '--bare'], wait=True) > + _git(args=['config', 'core.logallrefupdates', 'true'], wait=True) > + # create an empty blob (e69de29bb2d1d6434b8b29ae775ad8c2e48c5391) > + _git(args=['hash-object', '-w', '--stdin'], input='', wait=True) > + _git( > + args=[ > + 'commit', '--allow-empty', '-m', 'Start a new nmbug repository' > + ], > + additional_env={'GIT_WORK_TREE': NMBGIT}, > + wait=True) > + > + > def checkout(): > """ > Update the notmuch database from Git. > @@ -725,6 +744,7 @@ if __name__ == '__main__': > 'commit', > 'fetch', > 'help', > + 'init', > 'log', > 'merge', > 'pull', > -- > 2.1.0.60.g85f0837