annotate hgsubversion/layouts/base.py @ 1265:4744b7bfa476

layouts: change constructor to take a meta object This change is another step forward to centralize subversion configuration options and help refactor. I couldn't find an easier way to split up this change since there are many interdependent function calls. There is no functionality change in this patch, only renaming ui -> meta.
author Sean Farley <sean.michael.farley@gmail.com>
date Mon, 24 Mar 2014 11:20:49 -0500
parents c3c4518e00aa
children 7bbe120be193
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1012
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
1 """Module to hold the base API for layout classes.
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
2
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
3 This module should not contain any implementation, just a definition
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
4 of the API concrete layouts are expected to implement.
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
5
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
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
8 from mercurial import util as hgutil
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
9
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
10 class BaseLayout(object):
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
11
1265
4744b7bfa476 layouts: change constructor to take a meta object
Sean Farley <sean.michael.farley@gmail.com>
parents: 1153
diff changeset
12 def __init__(self, meta):
4744b7bfa476 layouts: change constructor to take a meta object
Sean Farley <sean.michael.farley@gmail.com>
parents: 1153
diff changeset
13 self.meta = meta
1024
8feff33e387d layouts: make ui object available to layout instances
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 __unimplemented(self, method_name):
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
16 raise NotImplementedError(
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
17 "Incomplete layout implementation: %s.%s doesn't implement %s" %
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
18 (self.__module__, self.__name__, method_name))
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
19
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
20 def localname(self, path):
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
21 """Compute the local name for a branch located at path.
1014
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
22
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
23 path should be relative to the repo url.
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
24
1012
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
25 """
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
diff changeset
26 self.__unimplemented('localname')
1013
d507c1a12dcb layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents: 1012
diff changeset
27
d507c1a12dcb layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents: 1012
diff changeset
28 def remotename(self, branch):
1014
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
29 """Compute a subversion path for a mercurial branch name
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
30
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
31 This should return a path relative to the repo url
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
32
1091
384eb7e05b61 layouts: teach layout detection from file about alternate layouts
David Schleimer <dschleimer@fb.com>
parents: 1089
diff changeset
33 Implementations may indicate that no mapping is possible for
384eb7e05b61 layouts: teach layout detection from file about alternate layouts
David Schleimer <dschleimer@fb.com>
parents: 1089
diff changeset
34 the given branch by raising a KeyError.
384eb7e05b61 layouts: teach layout detection from file about alternate layouts
David Schleimer <dschleimer@fb.com>
parents: 1089
diff changeset
35
1014
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
36 """
1013
d507c1a12dcb layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents: 1012
diff changeset
37 self.__unimplemented('remotename')
1014
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
38
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
39 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
40 """Compute a subversion path for a mercurial branch name.
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
41
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
42 This should return an absolute path, assuming our repo root is at subdir
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
43 A false subdir shall be taken to mean /.
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
44
1091
384eb7e05b61 layouts: teach layout detection from file about alternate layouts
David Schleimer <dschleimer@fb.com>
parents: 1089
diff changeset
45 Implementations may indicate that no mapping is possible for
384eb7e05b61 layouts: teach layout detection from file about alternate layouts
David Schleimer <dschleimer@fb.com>
parents: 1089
diff changeset
46 the given branch by raising a KeyError.
384eb7e05b61 layouts: teach layout detection from file about alternate layouts
David Schleimer <dschleimer@fb.com>
parents: 1089
diff changeset
47
1014
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
48 """
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
49 self.__unimplemented('remotepath')
1026
66395f232b7c layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents: 1024
diff changeset
50
1153
c3c4518e00aa svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents: 1094
diff changeset
51 def taglocations(self, metapath):
1026
66395f232b7c layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents: 1024
diff changeset
52 """Return a list of locations within svn to search for tags
66395f232b7c layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents: 1024
diff changeset
53
66395f232b7c layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents: 1024
diff changeset
54 Should be returned in reverse-sorted order.
66395f232b7c layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents: 1024
diff changeset
55
66395f232b7c layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents: 1024
diff changeset
56 """
66395f232b7c layouts: pull tag location list management into layout module
David Schleimer <dschleimer@fb.com>
parents: 1024
diff changeset
57 self.__unimplemented('tagpaths')
1027
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
58
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
59 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
60 """Get the tag name for the given svn path, if it is a possible tag.
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
61
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
62 This function should return None if the path cannot be a tag.
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
63 Returning a non-empty sring does not imply that the path is a
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
64 tag, only that it is a candidate to be a tag. Returning an
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
65 empty string is an error.
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
66
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
67 Path should be relative to the repo url.
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
68 taglocations should be as returned by self.taglocations()
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
69
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
70 """
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
71 self.__unimplemented('get_path_tag')
1029
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
72
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
73 def split_remote_name(self, path, known_branches):
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
74 """Split the path into a branch component and a local component.
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
75
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
76 path should be relative to our repo url
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
77
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
78 returns (branch_path, local_path)
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
79
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
80 branch_path should be suitable to pass into localname,
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
81 i.e. branch_path should NOT have a leading or trailing /
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
82
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
83 local_path should be relative to the root of the Mercurial working dir
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
84
1094
9a7e3dbd0f6e layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents: 1091
diff changeset
85 Note that it is permissible to return a longer branch_path
9a7e3dbd0f6e layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents: 1091
diff changeset
86 than is passed in iff the path that is passed in is a parent
9a7e3dbd0f6e layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents: 1091
diff changeset
87 directory of exactly one branch. This is intended to handle
9a7e3dbd0f6e layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents: 1091
diff changeset
88 the case where we are importing a particular subdirectory of
9a7e3dbd0f6e layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents: 1091
diff changeset
89 asubversion branch structure.
9a7e3dbd0f6e layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents: 1091
diff changeset
90
1029
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
91 """
1089
91d061989acc layouts: correct flubbed __unimplement call in base layout
David Schleimer <dschleimer@fb.com>
parents: 1029
diff changeset
92 self.__unimplemented('split_remote_name')