summaryrefslogtreecommitdiff
path: root/scripts/builder/repository.py
Unidiff
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 @@
1#!/usr/bin/env python
2# -*- coding: UTF-8 -*-
3
4
5def repositoryWithPath (path):
6 try:
7 from dulwich.repo import Repo
8
9 repo = Repo(path)
10 result = GitRepository(repo, path)
11 except:
12 from mercurial import ui, hg
13
14 repo = hg.repository(ui.ui(), path)
15 result = HgRepository(repo, path)
16
17 return result
18
19
20#===================================================================
21
22
23class Repository(object):
24
25 def __init__ (self, repository, path):
26 self.repository = repository
27 self.path = path
28
29
30 def revision (self):
31 raise NotImplementedError()
32
33
34 def areTherePendingChanges (self):
35 raise NotImplementedError()
36
37
38 def version (self):
39 result = self.revision()
40 if self.areTherePendingChanges():
41 result = '>>> ' + result + ' <<<'
42
43 # print "VERSION: " + result
44 return result
45
46
47#===================================================================
48
49
50class GitRepository(Repository):
51
52 def revision (self):
53 return repository.refs['HEAD']
54
55
56 def areTherePendingChanges (self):
57 return repository.is_dirty()
58
59
60#===================================================================
61
62
63class HgRepository(Repository):
64 #http://mercurial.selenic.com/wiki/MercurialApi
65
66 def revision (self):
67 return 'hg:' + str(self.repository['tip'])
68
69
70 def areTherePendingChanges (self):
71 # TODO: FIXME: repository.status() does not report 'unknown(?)' files. :(
72 return not all(map(lambda fileList: len(fileList) == 0, self.repository.status()))
73
74
75#===================================================================