projects
/
mass-build.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d4fc8a2
)
call git as subprocess instead of using the git python API
author
Ralf Jung
<post@ralfj.de>
Sun, 15 Sep 2013 13:40:12 +0000
(15:40 +0200)
committer
Ralf Jung
<post@ralfj.de>
Sun, 15 Sep 2013 13:40:12 +0000
(15:40 +0200)
build_system.py
patch
|
blob
|
history
vcs.py
patch
|
blob
|
history
diff --git
a/build_system.py
b/build_system.py
index 63a236ef5431f7a6a781b07b6abed706af4b2ac4..75b55376aff6b85ec68d6ead64da0352282349ae 100644
(file)
--- a/
build_system.py
+++ b/
build_system.py
@@
-99,7
+99,7
@@
try:
'name': self.config['debName'],
'email': self.config['debEMail'],
'parallelJobs': self.config['jobs'],
'name': self.config['debName'],
'email': self.config['debEMail'],
'parallelJobs': self.config['jobs'],
- 'version': versionName,
+ 'version': versionName
+ self.config.get('versionSuffix', '')
,
'waitAfterConfig': waitAfterConfig,
}
# copy some more optional configuration
'waitAfterConfig': waitAfterConfig,
}
# copy some more optional configuration
diff --git
a/vcs.py
b/vcs.py
index 89a4920ba006b36753bc7b3ddb8db033b5930da0..8d8d836284a95360222bb16b786777af7d6bc9f3 100644
(file)
--- a/
vcs.py
+++ b/
vcs.py
@@
-15,7
+15,7
@@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-import os,
git,
subprocess, re
+import os, subprocess, re
'''A VCS must have an "update" method with an optional "mode" parameter taking one of the three values below,
a "version" method returning a version name (or None),
'''A VCS must have an "update" method with an optional "mode" parameter taking one of the three values below,
a "version" method returning a version name (or None),
@@
-30,6
+30,18
@@
def natural_sort_key(val):
def get_non_digit_prefix(val):
return re.match('[^0-9]*', val).group(0)
def get_non_digit_prefix(val):
return re.match('[^0-9]*', val).group(0)
+class GitCommand:
+ def __getattr__(self, name):
+ def call(*args):
+ cmd = ["git", name.replace('_', '-')] + list(args)
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE) # TODO use with
+ (stdout, stderr) = p.communicate()
+ if p.returncode != 0:
+ raise Exception("Running %s returned non-zero exit code %d" % (str(cmd), p.returncode))
+ return filter(len, stdout.split('\n')) # return list of non-empty lines
+ return call
+git = GitCommand()
+
# Fetch updates from git
class Git:
def __init__(self, folder, config):
# Fetch updates from git
class Git:
def __init__(self, folder, config):
@@
-37,10
+49,6
@@
class Git:
self.url = config['url']
self.commit = config['version']
self.url = config['url']
self.commit = config['version']
- class _ProgressPrinter(git.remote.RemoteProgress):
- def update(self, op_code, cur_count, max_count=None, message=''):
- print self._cur_line+(" "*30)+"\r",
-
def update(self, mode = MODE_REBASE):
isBranch = (self.commit.startswith('origin/'))
if isBranch:
def update(self, mode = MODE_REBASE):
isBranch = (self.commit.startswith('origin/'))
if isBranch:
@@
-50,36
+58,33
@@
class Git:
# get us a git repository, and the "origin" remote
if os.path.exists(self.folder):
# load existing repo
# get us a git repository, and the "origin" remote
if os.path.exists(self.folder):
# load existing repo
- repo = git.Repo(self.folder)
- origin = repo.remotes.origin
- origin.config_writer.set_value("url", self.url) # make sure we use the current URL
+ os.chdir(self.folder)
+ git.remote("set-url", "origin", self.url) # make sure we use the current URL
else:
# create a new one
os.makedirs(self.folder)
else:
# create a new one
os.makedirs(self.folder)
-
repo = git.Repo.init
(self.folder)
-
origin = repo.create_remote('origin', self.url
)
- origin.fetch(progress=Git._ProgressPrinter()) # download new data
- print " "*80+"\r", # clean the line we are in
+
os.chdir
(self.folder)
+
git.init(
)
+ git.remote("add", "origin", self.url)
+ git.fetch("origin")
if mode == MODE_FETCH:
return
# create/find correct branch
if mode == MODE_FETCH:
return
# create/find correct branch
- if branchname in repo.heads:
- branch = repo.heads[branchname]
- else:
- branch = repo.create_head(branchname, self.commit)
- if isBranch: # track remote branch
- branch.set_tracking_branch(origin.refs[branchname])
+ if not git.branch("--list", branchname): # the branch does not yet exit
+ git.branch(branchname, self.commit)
+ if isBranch: # make sure we track remote branch
+ git.branch("-u", self.commit, branchname)
# update it to the latest remote commit
# update it to the latest remote commit
-
branch.checkout(
)
+
git.checkout(branchname
)
if mode == MODE_RESET:
if mode == MODE_RESET:
-
repo.head.reset(self.commit, working_tree=True
)
+
git.reset("--hard", self.commit
)
else:
else:
-
repo.
git.rebase(self.commit)
+ git.rebase(self.commit)
# update submodules
# update submodules
-
repo.
git.submodule("update", "--init", "--recursive", "--rebase")
+ git.submodule("update", "--init", "--recursive", "--rebase")
# done
print "...done",
# done
print "...done",
- if
repo.head.reference.commit != repo.commit(self.commit)
:
+ if
git.rev_parse("HEAD")[0] != git.rev_parse(self.commit)[0]
:
print "(keeping local patches around)",
print
print "(keeping local patches around)",
print
@@
-90,10
+95,9
@@
class Git:
def checkVersions(self):
self.update(mode = MODE_FETCH)
def checkVersions(self):
self.update(mode = MODE_FETCH)
- repo = git.Repo(self.folder)
- currentVersion = repo.git.describe()
+ currentVersion = git.describe()[0]
# get sorted list of tag names with the same non-digit prefix and higher version number
# get sorted list of tag names with the same non-digit prefix and higher version number
- tags =
map(str, repo.tags
)
+ tags =
git.tag(
)
tags = filter(lambda t: get_non_digit_prefix(t) == get_non_digit_prefix(currentVersion) and natural_sort_key(t) > natural_sort_key(currentVersion), tags)
if not tags: return
tags.sort(key = natural_sort_key)
tags = filter(lambda t: get_non_digit_prefix(t) == get_non_digit_prefix(currentVersion) and natural_sort_key(t) > natural_sort_key(currentVersion), tags)
if not tags: return
tags.sort(key = natural_sort_key)