summaryrefslogtreecommitdiff
path: root/scripts/builder/repository.py
authorGiulio Cesare Solaroli <giulio.cesare@clipperz.com>2012-02-11 23:48:42 (UTC)
committer Giulio Cesare Solaroli <giulio.cesare@clipperz.com>2012-02-11 23:48:42 (UTC)
commita0661c3b02aa26d6b08ff13dc321e09478868159 (patch) (side-by-side diff)
tree87bd0af25a0732adb9d14a34d25f9d5479fdf5ee /scripts/builder/repository.py
parent96d01919d3ff42c3fdd7f6186a0500caccd3c140 (diff)
parent7804333809bf725e32a08c531a06acd7d668e190 (diff)
downloadclipperz-a0661c3b02aa26d6b08ff13dc321e09478868159.zip
clipperz-a0661c3b02aa26d6b08ff13dc321e09478868159.tar.gz
clipperz-a0661c3b02aa26d6b08ff13dc321e09478868159.tar.bz2
Merge pull request #25 from gcsolaroli/master
Initial integration of /beta and /gamma with a single backend
Diffstat (limited to 'scripts/builder/repository.py') (more/less context) (ignore whitespace changes)
-rw-r--r--scripts/builder/repository.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/scripts/builder/repository.py b/scripts/builder/repository.py
new file mode 100644
index 0000000..89db9a5
--- a/dev/null
+++ b/scripts/builder/repository.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+
+def repositoryWithPath (path):
+ try:
+ from dulwich.repo import Repo
+
+ repo = Repo(path)
+ result = GitRepository(repo, path)
+ except:
+ from mercurial import ui, hg
+
+ repo = hg.repository(ui.ui(), path)
+ result = HgRepository(repo, path)
+
+ return result
+
+
+#===================================================================
+
+
+class Repository(object):
+
+ def __init__ (self, repository, path):
+ self.repository = repository
+ self.path = path
+
+
+ def revision (self):
+ raise NotImplementedError()
+
+
+ def areTherePendingChanges (self):
+ raise NotImplementedError()
+
+
+ def version (self):
+ result = self.revision()
+ if self.areTherePendingChanges():
+ result = '>>> ' + result + ' <<<'
+
+ # print "VERSION: " + result
+ return result
+
+
+#===================================================================
+
+
+class GitRepository(Repository):
+
+ def revision (self):
+ return repository.refs['HEAD']
+
+
+ def areTherePendingChanges (self):
+ return repository.is_dirty()
+
+
+#===================================================================
+
+
+class HgRepository(Repository):
+ # http://mercurial.selenic.com/wiki/MercurialApi
+
+ def revision (self):
+ return 'hg:' + str(self.repository['tip'])
+
+
+ def areTherePendingChanges (self):
+ # TODO: FIXME: repository.status() does not report 'unknown(?)' files. :(
+ return not all(map(lambda fileList: len(fileList) == 0, self.repository.status()))
+
+
+#===================================================================