Mercurial > hgsubversion
annotate hgsubversion/layouts/standard.py @ 1026:66395f232b7c
layouts: pull tag location list management into layout module
We keep a list of locations within subversion where we look for tags
that persists across runs. This pulls the logic for constructiong
that list from config on first clone, and for mainting the list
afterwards out of svnmeta and into layouts.
author | David Schleimer <dschleimer@fb.com> |
---|---|
date | Tue, 21 May 2013 16:29:18 -0700 |
parents | 0ed7cf23e801 |
children | 16045f6f3fef |
rev | line source |
---|---|
1026
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
1 import os.path |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
2 import pickle |
1012
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
3 |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
4 import base |
1026
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
5 import hgsubversion.util as util |
1012
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
6 |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
7 class StandardLayout(base.BaseLayout): |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
8 """The standard trunk, branches, tags layout""" |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
9 |
1026
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
10 def __init__(self, ui): |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
11 base.BaseLayout.__init__(self, ui) |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
12 |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
13 self._tag_locations = None |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
14 |
1012
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
15 def localname(self, path): |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
16 if path == 'trunk': |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
17 return None |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
18 elif path.startswith('branches/'): |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
19 return path[len('branches/'):] |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff
changeset
|
20 return '../%s' % path |
1013
d507c1a12dcb
layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents:
1012
diff
changeset
|
21 |
d507c1a12dcb
layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents:
1012
diff
changeset
|
22 def remotename(self, branch): |
d507c1a12dcb
layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents:
1012
diff
changeset
|
23 if branch == 'default' or branch is None: |
d507c1a12dcb
layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents:
1012
diff
changeset
|
24 return 'trunk' |
d507c1a12dcb
layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents:
1012
diff
changeset
|
25 elif branch.startswith('../'): |
d507c1a12dcb
layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents:
1012
diff
changeset
|
26 return branch[3:] |
d507c1a12dcb
layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents:
1012
diff
changeset
|
27 return 'branches/%s' % branch |
1014
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
28 |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
29 def remotepath(self, branch, subdir='/'): |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
30 branchpath = 'trunk' |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
31 if branch: |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
32 if branch.startswith('../'): |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
33 branchpath = branch[3:] |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
34 else: |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
35 branchpath = 'branches/%s' % branch |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
36 |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
37 return '%s/%s' % (subdir or '', branchpath) |
1026
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
38 |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
39 def taglocations(self, meta_data_dir): |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
40 if self._tag_locations is None: |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
41 |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
42 tag_locations_file = os.path.join(meta_data_dir, 'tag_locations') |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
43 |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
44 if os.path.exists(tag_locations_file): |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
45 f = open(tag_locations_file) |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
46 self._tag_locations = pickle.load(f) |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
47 f.close() |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
48 else: |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
49 self._tag_locations = self.ui.configlist('hgsubversion', |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
50 'tagpaths', |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
51 ['tags']) |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
52 util.pickle_atomic(self._tag_locations, tag_locations_file) |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
53 |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
54 # ensure nested paths are handled properly |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
55 self._tag_locations.sort() |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
56 self._tag_locations.reverse() |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
57 |
66395f232b7c
layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents:
1014
diff
changeset
|
58 return self._tag_locations |