diff options
author | Chris Reffett <creffett@gentoo.org> | 2014-02-07 17:46:22 -0500 |
---|---|---|
committer | Brian Dolbec <dolsen@gentoo.org> | 2014-12-04 11:54:05 -0800 |
commit | 112cd2845874291719582e5cd11c2c757157c68d (patch) | |
tree | d05c900738812bd258d5ab5b1b3d0dab45ea7311 | |
parent | Separate out the actual sync code to a private function. (diff) | |
download | portage-112cd2845874291719582e5cd11c2c757157c68d.tar.gz portage-112cd2845874291719582e5cd11c2c757157c68d.tar.bz2 portage-112cd2845874291719582e5cd11c2c757157c68d.zip |
Add auto-clone support for git sync
Make the git sync module clone the upstream repository if the directory
specified in repos.conf isn't a git directory. Fixes bug 485402.
-rw-r--r-- | pym/portage/sync/modules/git/git.py | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/pym/portage/sync/modules/git/git.py b/pym/portage/sync/modules/git/git.py index c500bb2f5..539249b2a 100644 --- a/pym/portage/sync/modules/git/git.py +++ b/pym/portage/sync/modules/git/git.py @@ -57,17 +57,36 @@ class GitSync(object): if not self.has_git: return repo.location, 1, False - msg = ">>> Starting git pull in %s..." % repo.location - logger(xterm_titles, msg ) - writemsg_level(msg + "\n") - exitcode = portage.process.spawn_bash("cd %s ; git pull" % \ + # Test if the directory is a valid git repo, and run + # git clone if not + exitcode = portage.process.spawn_bash("cd %s ; git rev-parse" %\ (portage._shell_quote(repo.location),), **portage._native_kwargs(spawn_kwargs)) - if exitcode != os.EX_OK: - msg = "!!! git pull error in %s." % repo.location + if exitcode == 128: + msg = "!!! Git repo does not already exist, cloning from upstream..." logger(xterm_titles, msg) - writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1) - return exitcode + writemsg_level(msg + "\n") + exitcode = portage.process.spawn_bash("cd %s ; git clone %s ." % \ + (portage._shell_quote(repo.location), + portage._shell_quote(repo.sync_uri)), + **portage._native_kwargs(spawn_kwargs)) + if exitcode != os.EX_OK: + msg = "!!! git clone error in %s." % repo.location + logger(xterm_titles, msg) + writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1) + return (exitcode, False) + else: + msg = ">>> Starting git pull in %s..." % repo.location + logger(xterm_titles, msg ) + writemsg_level(msg + "\n") + exitcode = portage.process.spawn_bash("cd %s ; git pull" % \ + (portage._shell_quote(repo.location),), + **portage._native_kwargs(spawn_kwargs)) + if exitcode != os.EX_OK: + msg = "!!! git pull error in %s." % repo.location + logger(xterm_titles, msg) + writemsg_level(msg + "\n", level=logging.ERROR, noiselevel=-1) + return (exitcode, False) msg = ">>> Git pull in %s successful" % repo.location logger(xterm_titles, msg) writemsg_level(msg + "\n") |