Mercurial > hgsubversion
comparison hgsubversion/maps.py @ 1440:4d3a51e82147
BaseMap: extract filename attribute magic into a classmethod
I'm not really sure I like this magic anymore, but we can at least
contain it to make the next patch cleaner.
| author | Augie Fackler <raf@durin42.com> |
|---|---|
| date | Mon, 06 Jun 2016 00:42:07 -0400 |
| parents | ab15749252b0 |
| children | e79ff1a85938 |
comparison
equal
deleted
inserted
replaced
| 1439:ab15749252b0 | 1440:4d3a51e82147 |
|---|---|
| 18 self._ui = meta.ui | 18 self._ui = meta.ui |
| 19 | 19 |
| 20 self._commentre = re.compile(r'((^|[^\\])(\\\\)*)#.*') | 20 self._commentre = re.compile(r'((^|[^\\])(\\\\)*)#.*') |
| 21 self.syntaxes = ('re', 'glob') | 21 self.syntaxes = ('re', 'glob') |
| 22 | 22 |
| 23 self._filepath = meta.__getattribute__(self.defaultfilenameattr()) | |
| 24 self.load(self._filepath) | |
| 25 | |
| 26 # Append mappings specified from the commandline. A little | |
| 27 # magic here: our name in the config mapping is the same as | |
| 28 # the class name lowercased. | |
| 29 clmap = util.configpath(self._ui, self.mapname()) | |
| 30 if clmap: | |
| 31 self.load(clmap) | |
| 32 | |
| 33 @classmethod | |
| 34 def mapname(cls): | |
| 35 return cls.__name__.lower() | |
| 36 | |
| 37 @classmethod | |
| 38 def defaultfilenameattr(cls): | |
| 23 # trickery: all subclasses have the same name as their file and config | 39 # trickery: all subclasses have the same name as their file and config |
| 24 # names, e.g. AuthorMap is meta.authormap_file for the filename and | 40 # names, e.g. AuthorMap is meta.authormap_file for the filename and |
| 25 # 'authormap' for the config option | 41 # 'authormap' for the config option |
| 26 self.mapname = self.__class__.__name__.lower() | 42 return cls.mapname() + '_file' |
| 27 self.mapfilename = self.mapname + '_file' | |
| 28 self._filepath = meta.__getattribute__(self.mapfilename) | |
| 29 self.load(self._filepath) | |
| 30 | |
| 31 # append mappings specified from the commandline | |
| 32 clmap = util.configpath(self._ui, self.mapname) | |
| 33 if clmap: | |
| 34 self.load(clmap) | |
| 35 | 43 |
| 36 def _findkey(self, key): | 44 def _findkey(self, key): |
| 37 '''Takes a string and finds the first corresponding key that matches | 45 '''Takes a string and finds the first corresponding key that matches |
| 38 via regex''' | 46 via regex''' |
| 39 if not key: | 47 if not key: |
| 109 writing = False | 117 writing = False |
| 110 mapfile = self._filepath | 118 mapfile = self._filepath |
| 111 if path != mapfile: | 119 if path != mapfile: |
| 112 writing = open(mapfile, 'a') | 120 writing = open(mapfile, 'a') |
| 113 | 121 |
| 114 self._ui.debug('reading %s from %s\n' % (self.mapname , path)) | 122 self._ui.debug('reading %s from %s\n' % (self.mapname() , path)) |
| 115 f = open(path, 'r') | 123 f = open(path, 'r') |
| 116 syntax = '' | 124 syntax = '' |
| 117 for number, line in enumerate(f): | 125 for number, line in enumerate(f): |
| 118 | 126 |
| 119 if writing: | 127 if writing: |
| 145 # split on the first '=' | 153 # split on the first '=' |
| 146 try: | 154 try: |
| 147 src, dst = line.split('=', 1) | 155 src, dst = line.split('=', 1) |
| 148 except (IndexError, ValueError): | 156 except (IndexError, ValueError): |
| 149 msg = 'ignoring line %i in %s %s: %s\n' | 157 msg = 'ignoring line %i in %s %s: %s\n' |
| 150 self._ui.status(msg % (number, self.mapname, path, | 158 self._ui.status(msg % (number, self.mapname(), path, |
| 151 line.rstrip())) | 159 line.rstrip())) |
| 152 continue | 160 continue |
| 153 | 161 |
| 154 src = src.strip() | 162 src = src.strip() |
| 155 dst = dst.strip() | 163 dst = dst.strip() |
| 159 if pat == 'glob': | 167 if pat == 'glob': |
| 160 src = src.replace('\\*', '.*') | 168 src = src.replace('\\*', '.*') |
| 161 src = re.compile(src) | 169 src = re.compile(src) |
| 162 | 170 |
| 163 if src not in self: | 171 if src not in self: |
| 164 self._ui.debug('adding %s to %s\n' % (src, self.mapname)) | 172 self._ui.debug('adding %s to %s\n' % (src, self.mapname())) |
| 165 elif dst != self[src]: | 173 elif dst != self[src]: |
| 166 msg = 'overriding %s: "%s" to "%s" (%s)\n' | 174 msg = 'overriding %s: "%s" to "%s" (%s)\n' |
| 167 self._ui.status(msg % (self.mapname, self[src], dst, src)) | 175 self._ui.status(msg % (self.mapname(), self[src], dst, src)) |
| 168 self[src] = dst | 176 self[src] = dst |
| 169 | 177 |
| 170 f.close() | 178 f.close() |
| 171 if writing: | 179 if writing: |
| 172 writing.close() | 180 writing.close() |
