Mercurial > hgsubversion
annotate hgsubversion/layouts/standard.py @ 1027:16045f6f3fef
layouts: pull svn path -> potential tag name mapping into layouts
author | David Schleimer <dschleimer@fb.com> |
---|---|
date | Wed, 26 Jun 2013 14:40:31 -0500 |
parents | 66395f232b7c |
children | 513f2b607b06 |
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 |
1027
16045f6f3fef
layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents:
1026
diff
changeset
|
59 |
16045f6f3fef
layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents:
1026
diff
changeset
|
60 def get_path_tag(self, path, taglocations): |
16045f6f3fef
layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents:
1026
diff
changeset
|
61 for tagspath in taglocations: |
16045f6f3fef
layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents:
1026
diff
changeset
|
62 if path.startswith(tagspath + '/'): |
16045f6f3fef
layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents:
1026
diff
changeset
|
63 tag = path[len(tagspath) + 1:] |
16045f6f3fef
layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents:
1026
diff
changeset
|
64 if tag: |
16045f6f3fef
layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents:
1026
diff
changeset
|
65 return tag |
16045f6f3fef
layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents:
1026
diff
changeset
|
66 return None |