aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MgaRepo/VCS.py21
-rw-r--r--MgaRepo/git.py4
-rw-r--r--MgaRepo/rpmutil.py10
-rw-r--r--MgaRepo/svn.py4
4 files changed, 28 insertions, 11 deletions
diff --git a/MgaRepo/VCS.py b/MgaRepo/VCS.py
index 7a9170b..ee419f4 100644
--- a/MgaRepo/VCS.py
+++ b/MgaRepo/VCS.py
@@ -1,5 +1,6 @@
from MgaRepo import Error, SilentError, config
from MgaRepo.util import execcmd, get_auth
+from MgaRepo import layout
from xml.etree import ElementTree
import sys
import os
@@ -23,13 +24,19 @@ class VCSLogEntry(object):
class VCS(object):
vcs_dirname = None
vcs_name = None
- def __init__(self, path):
+ def __init__(self, path, url):
self.vcs_command = None
self.vcs_wrapper = "mga-ssh"
self.vcs_supports = {'clone' : False}
self.vcs_type = None
self.env_defaults = None
- self._path = path
+ if not path and not url:
+ self._path = os.path.curdir
+ elif not path and url:
+ self._path = layout.package_name(layout.remove_current(url))
+ else:
+ self._path = path
+ self._url = url
def _execVcs(self, *args, **kwargs):
localcmds = ("add", "revert", "cleanup", "mv")
@@ -393,6 +400,16 @@ class VCS(object):
else:
return None
+ @property
+ def path(self):
+ return self._path
+
+ @property
+ def url(self):
+ if not self._url:
+ self._url = self.info2(self._path)["URL"]
+ return self._url
+
class VCSLook(object):
def __init__(self, repospath, txn=None, rev=None):
self.repospath = repospath
diff --git a/MgaRepo/git.py b/MgaRepo/git.py
index 01f21f0..3576893 100644
--- a/MgaRepo/git.py
+++ b/MgaRepo/git.py
@@ -19,8 +19,8 @@ class GITLogEntry(VCSLogEntry):
class GIT(VCS):
vcs_dirname = ".git"
vcs_name = "git"
- def __init__(self, path=os.path.curdir):
- VCS.__init__(self, path)
+ def __init__(self, path=None, url=None):
+ VCS.__init__(self, path, url)
self.vcs_command = config.get("global", "git-command", ["git"])
self.vcs_supports['clone'] = True
self.env_defaults = {"GIT_SSH": self.vcs_wrapper}
diff --git a/MgaRepo/rpmutil.py b/MgaRepo/rpmutil.py
index 2b78d68..9cfbef2 100644
--- a/MgaRepo/rpmutil.py
+++ b/MgaRepo/rpmutil.py
@@ -19,14 +19,14 @@ def detectVCS(url):
if ':' in url:
protocol,uri = url.split(":")
if "svn" in protocol:
- return SVN()
+ return SVN(url=url)
elif "git" in protocol:
- return GIT()
+ return GIT(url=url)
elif "http" in protocol:
if uri.endswith(".git"):
- return GIT()
+ return GIT(url=url)
elif "svn" in uri:
- return SVN()
+ return SVN(url=url)
raise Error("Unknown protocol %s for %s" % (protocol, url))
elif os.path.exists(url) and os.path.isdir(url):
while True:
@@ -34,7 +34,7 @@ def detectVCS(url):
for vcs in (SVN, GIT):
vcsdir = os.path.join(url, vcs.vcs_dirname)
if os.path.exists(vcsdir) and os.path.isdir(vcsdir):
- return vcs(url)
+ return vcs(path=url)
url = os.path.dirname(url)
if url == "/":
break
diff --git a/MgaRepo/svn.py b/MgaRepo/svn.py
index 15d1cbc..5f8851c 100644
--- a/MgaRepo/svn.py
+++ b/MgaRepo/svn.py
@@ -14,8 +14,8 @@ class SVNLogEntry(VCSLogEntry):
class SVN(VCS):
vcs_dirname = ".svn"
vcs_name = "svn"
- def __init__(self, path=os.path.curdir):
- VCS.__init__(self, path)
+ def __init__(self, path=None, url=None):
+ VCS.__init__(self, path, url)
self.vcs_command = config.get("global", "svn-command", ["svn"])
self.env_defaults = {"SVN_SSH": self.vcs_wrapper}