Mercurial > hg > buttercup
annotate buttercup/source.py @ 20:60ddc49acd5f
add partial checkout method to hg
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Mon, 30 May 2011 13:49:51 -0700 |
parents | d3b1bf9d8235 |
children | 1f54294629f9 |
rev | line source |
---|---|
18
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
1 import os |
20
60ddc49acd5f
add partial checkout method to hg
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
2 try: |
60ddc49acd5f
add partial checkout method to hg
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
3 from subprocess import check_call as call |
60ddc49acd5f
add partial checkout method to hg
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
4 except: |
60ddc49acd5f
add partial checkout method to hg
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
5 from subprocess import call |
18
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
6 |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
7 class Source(object): |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
8 """abstract base class for VCS source""" |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
9 def __init__(self, uri, srcdir=None): |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
10 self.uri = uri |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
11 self.srcdir = srcdir or os.getcwd() |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
12 |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
13 @classmethod |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
14 def directory_name(cls, uri): |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
15 """return relative directory name from self.uri""" |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
16 return uri.rstrip('/').split('/')[-1] |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
17 |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
18 def directory(self): |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
19 return os.path.join(self.srcdir, self.directory_name(self.uri)) |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
20 |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
21 class HgSource(Source): |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
22 """mercurial source""" |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
23 |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
24 def update(self): |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
25 """updates a checkout or does one if it does not exist""" |
20
60ddc49acd5f
add partial checkout method to hg
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
26 if os.path.exists(self.directory()): |
60ddc49acd5f
add partial checkout method to hg
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
27 assert os.path.exists(os.path.join(self.directory(), '.hg')) |
60ddc49acd5f
add partial checkout method to hg
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
28 call(['hg', 'pull'], cwd=self.directory) |
60ddc49acd5f
add partial checkout method to hg
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
29 call(['hg', 'update'], cwd=self.directory) |
60ddc49acd5f
add partial checkout method to hg
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
30 else: |
60ddc49acd5f
add partial checkout method to hg
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
31 pass |
18
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
32 |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
33 class GitSource(Source): |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
34 |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
35 @classmethod |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
36 def directory_name(cls, uri): |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
37 ext = '.git' |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
38 if uri.endswith(uri): |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
39 uri = uri[:-len(ext)] |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
40 return Source.directory_name(uri) |
151862a0a711
begin restructuring to something more modular and extensible
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
41 |