aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Reffett <creffett@gentoo.org>2014-02-07 17:46:22 -0500
committerBrian Dolbec <dolsen@gentoo.org>2014-12-04 11:54:05 -0800
commit112cd2845874291719582e5cd11c2c757157c68d (patch)
treed05c900738812bd258d5ab5b1b3d0dab45ea7311
parentSeparate out the actual sync code to a private function. (diff)
downloadportage-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.py35
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")