See main core code for details.
We don't factor the code in a common function yet, because we will have to adapt
a bit more things in the keyword case at the end of the series.
| Alphare |
| hg-reviewers |
See main core code for details.
We don't factor the code in a common function yet, because we will have to adapt
a bit more things in the keyword case at the end of the series.
| Automatic diff as part of commit; lint not applicable. |
| Automatic diff as part of commit; unit tests not applicable. |
| Path | Packages | |||
|---|---|---|---|---|
| M | hgext/keyword.py (9 lines) |
| Status | Author | Revision | |
|---|---|---|---|
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute | ||
| Closed | marmoute |
| templatefilters, | templatefilters, | ||||
| templateutil, | templateutil, | ||||
| util, | util, | ||||
| ) | ) | ||||
| from mercurial.utils import ( | from mercurial.utils import ( | ||||
| dateutil, | dateutil, | ||||
| stringutil, | stringutil, | ||||
| ) | ) | ||||
| from mercurial.dirstateutils import timestamp | |||||
| cmdtable = {} | cmdtable = {} | ||||
| command = registrar.command(cmdtable) | command = registrar.command(cmdtable) | ||||
| # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for | # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for | ||||
| # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should | # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should | ||||
| # be specifying the version(s) of Mercurial they are tested with, or | # be specifying the version(s) of Mercurial they are tested with, or | ||||
| # leave the attribute unspecified. | # leave the attribute unspecified. | ||||
| testedwith = b'ships-with-hg-core' | testedwith = b'ships-with-hg-core' | ||||
| if self.restrict or rekw: | if self.restrict or rekw: | ||||
| re_kw = self.rekw | re_kw = self.rekw | ||||
| else: | else: | ||||
| re_kw = self.rekwexp | re_kw = self.rekwexp | ||||
| if expand: | if expand: | ||||
| msg = _(b'overwriting %s expanding keywords\n') | msg = _(b'overwriting %s expanding keywords\n') | ||||
| else: | else: | ||||
| msg = _(b'overwriting %s shrinking keywords\n') | msg = _(b'overwriting %s shrinking keywords\n') | ||||
| wctx = self.repo[None] | |||||
| for f in candidates: | for f in candidates: | ||||
| if self.restrict: | if self.restrict: | ||||
| data = self.repo.file(f).read(mf[f]) | data = self.repo.file(f).read(mf[f]) | ||||
| else: | else: | ||||
| data = self.repo.wread(f) | data = self.repo.wread(f) | ||||
| if stringutil.binary(data): | if stringutil.binary(data): | ||||
| continue | continue | ||||
| if expand: | if expand: | ||||
| else: | else: | ||||
| data, found = _shrinktext(data, re_kw.subn) | data, found = _shrinktext(data, re_kw.subn) | ||||
| if found: | if found: | ||||
| self.ui.note(msg % f) | self.ui.note(msg % f) | ||||
| fp = self.repo.wvfs(f, b"wb", atomictemp=True) | fp = self.repo.wvfs(f, b"wb", atomictemp=True) | ||||
| fp.write(data) | fp.write(data) | ||||
| fp.close() | fp.close() | ||||
| if kwcmd: | if kwcmd: | ||||
| self.repo.dirstate.set_clean(f) | s = wctx[f].lstat() | ||||
| mode = s.st_mode | |||||
| size = s.st_size | |||||
| mtime = timestamp.mtime_of(s) | |||||
| cache_data = (mode, size, mtime) | |||||
| self.repo.dirstate.set_clean(f, cache_data) | |||||
| elif self.postcommit: | elif self.postcommit: | ||||
| self.repo.dirstate.update_file_p1(f, p1_tracked=True) | self.repo.dirstate.update_file_p1(f, p1_tracked=True) | ||||
| def shrink(self, fname, text): | def shrink(self, fname, text): | ||||
| '''Returns text with all keyword substitutions removed.''' | '''Returns text with all keyword substitutions removed.''' | ||||
| if self.match(fname) and not stringutil.binary(text): | if self.match(fname) and not stringutil.binary(text): | ||||
| return _shrinktext(text, self.rekwexp.sub) | return _shrinktext(text, self.rekwexp.sub) | ||||
| return text | return text | ||||