summaryrefslogtreecommitdiff
path: root/scripts/builder/repository.py
Side-by-side diff
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()))
+
+
+#===================================================================