-rw-r--r-- | scripts/builder/repository.py | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/scripts/builder/repository.py b/scripts/builder/repository.py index f8528c2..0045de7 100644 --- a/scripts/builder/repository.py +++ b/scripts/builder/repository.py | |||
@@ -1,77 +1,81 @@ | |||
1 | #!/usr/bin/env python | 1 | #!/usr/bin/env python |
2 | # -*- coding: UTF-8 -*- | 2 | # -*- coding: UTF-8 -*- |
3 | 3 | ||
4 | 4 | ||
5 | def repositoryWithPath (path): | 5 | def repositoryWithPath (path): |
6 | try: | 6 | try: |
7 | from git import Repo | ||
8 | |||
9 | repo = Repo(path) | ||
10 | result = GitRepository(repo, path) | ||
11 | except ImportError: | ||
12 | print "Failed to import git, please install http://gitorious.org/git-python" | ||
13 | #except: | ||
14 | from mercurial import ui, hg | 7 | from mercurial import ui, hg |
15 | 8 | ||
16 | repo = hg.repository(ui.ui(), path) | 9 | repo = hg.repository(ui.ui(), path) |
17 | result = HgRepository(repo, path) | 10 | result = HgRepository(repo, path) |
11 | except: | ||
12 | try: | ||
13 | from git import Repo | ||
14 | |||
15 | repo = Repo(path) | ||
16 | result = GitRepository(repo, path) | ||
17 | except ImportError, exception: | ||
18 | print "Failed to import git, please install http://gitorious.org/git-python" | ||
19 | raise exception | ||
20 | |||
18 | 21 | ||
19 | return result | 22 | return result |
20 | 23 | ||
21 | 24 | ||
22 | #=================================================================== | 25 | #=================================================================== |
23 | 26 | ||
24 | 27 | ||
25 | class Repository(object): | 28 | class Repository(object): |
26 | 29 | ||
27 | def __init__ (self, repository, path): | 30 | def __init__ (self, repository, path): |
28 | self.repository = repository | 31 | self.repository = repository |
29 | self.path = path | 32 | self.path = path |
30 | 33 | ||
31 | 34 | ||
32 | def revision (self): | 35 | def revision (self): |
33 | raise NotImplementedError() | 36 | raise NotImplementedError() |
34 | 37 | ||
35 | 38 | ||
36 | def areTherePendingChanges (self): | 39 | def areTherePendingChanges (self): |
37 | raise NotImplementedError() | 40 | raise NotImplementedError() |
38 | 41 | ||
39 | 42 | ||
40 | def version (self): | 43 | def version (self): |
41 | result = self.revision() | 44 | result = self.revision() |
42 | if self.areTherePendingChanges(): | 45 | if self.areTherePendingChanges(): |
43 | result = '>>> ' + result + ' <<<' | 46 | result = '>>> ' + result + ' <<<' |
44 | 47 | ||
45 | # print "VERSION: " + result | 48 | # print "VERSION: " + result |
46 | return result | 49 | return result |
47 | 50 | ||
48 | 51 | ||
49 | #=================================================================== | 52 | #=================================================================== |
50 | 53 | ||
51 | 54 | ||
52 | class GitRepository(Repository): | 55 | class GitRepository(Repository): |
56 | #http://gitorious.org/git-python | ||
53 | 57 | ||
54 | def revision (self): | 58 | def revision (self): |
55 | return self.repository.head.commit.hexsha | 59 | return self.repository.head.commit.hexsha |
56 | 60 | ||
57 | 61 | ||
58 | def areTherePendingChanges (self): | 62 | def areTherePendingChanges (self): |
59 | return self.repository.is_dirty() | 63 | return self.repository.is_dirty() |
60 | 64 | ||
61 | 65 | ||
62 | #=================================================================== | 66 | #=================================================================== |
63 | 67 | ||
64 | 68 | ||
65 | class HgRepository(Repository): | 69 | class HgRepository(Repository): |
66 | #http://mercurial.selenic.com/wiki/MercurialApi | 70 | #http://mercurial.selenic.com/wiki/MercurialApi |
67 | 71 | ||
68 | def revision (self): | 72 | def revision (self): |
69 | return 'hg:' + str(self.repository['tip']) | 73 | return 'hg:' + str(self.repository['tip']) |
70 | 74 | ||
71 | 75 | ||
72 | def areTherePendingChanges (self): | 76 | def areTherePendingChanges (self): |
73 | # TODO: FIXME: repository.status() does not report 'unknown(?)' files. :( | 77 | # TODO: FIXME: repository.status() does not report 'unknown(?)' files. :( |
74 | return not all(map(lambda fileList: len(fileList) == 0, self.repository.status())) | 78 | return not all(map(lambda fileList: len(fileList) == 0, self.repository.status())) |
75 | 79 | ||
76 | 80 | ||
77 | #=================================================================== | 81 | #=================================================================== |