Python script for automatic synchronization based on inotify

Dieter Plaetinck dieter at plaetinck.be
Sun Mar 20 12:26:36 CET 2011


On Sun, 20 Mar 2011 08:31:39 +0100
René Mayrhofer <rene at mayrhofer.eu.org> wrote:

> Am Freitag, 18. März 2011, 22:59:07 schrieb Dieter Plaetinck:
> > Note if you do this, server:test.git won't actually have a master branch yet.
> > So when i touch ~/autosync/test, I get this:
> > 
> > No refs in common and none specified; doing nothing.
> > Perhaps you should specify a branch such as 'master'.
> > fatal: The remote end hung up unexpectedly
> > error: failed to push some refs to 'server:autosync.git'
> > 
> > workaround is typing `git push origin master` once. after that it works fine.
> 
> You're right. I've never actually tried it on a completely empty repository. We should either document this in README (the setup process) or make the script realize when there is no master branch and do a "git push origin master" in this case. I will need to dig into the git remote command a bit more to see what the best option is here (I don't like parsing the output if I can avoid it).
> 
> best regards,
> Rene

I also thought of some options.
What about always explicitly pushing the current branch? unfortunately there is nothing like `git push origin --currentbranch`, so we would need to do ask git "what is the current branch", and then `git push origin $branchname`, but that involves an extra process; we could try to cache the result but that gets ugly quickly (you need to know when to invalidate the cache, i.e. when the user creates a new branch).  on the other hand, something like this would transparently allow the user to work with multiple branches; as far as i see there is currently no notion of the branch in autosync.py (i.e. "master" is always assumed), if we always do `git push master` we can fix the problem at hand (but then the user is restricted to the master branch, if he creates a new branch and we do a push of master, his new branch won't be pushed), if we do `git push $currentbranch` and also have a notion of the involved branch in the jabber messages, then the user could transparently use multiple branches.
Either way I don't think we should query the remote for "what do you have", frankly we shouldn't care.  we only care about pushing (explicitly enough) the thing that we need to push.

If you only want to support a master branch, hardcoding `git push origin master` is a good choice, but I don't like restricting ourselves like that. We can also say in the readme "every time you create a new branch, push it manually once", from then on, we can just `git push origin` and it will do the right thing.  it involves a tiny bit of manual work, but maybe this is the most sensible.

Dieter


More information about the vcs-home mailing list