Show More
@@ -100,46 +100,9 b' def utcdate(date):' | |||||
100 | '''Returns hgdate in cvs-like UTC format.''' |
|
100 | '''Returns hgdate in cvs-like UTC format.''' | |
101 | return time.strftime('%Y/%m/%d %H:%M:%S', time.gmtime(date[0])) |
|
101 | return time.strftime('%Y/%m/%d %H:%M:%S', time.gmtime(date[0])) | |
102 |
|
102 | |||
103 |
|
||||
104 | # make keyword tools accessible |
|
103 | # make keyword tools accessible | |
105 | kwtools = {'templater': None, 'hgcmd': '', 'inc': [], 'exc': ['.hg*']} |
|
104 | kwtools = {'templater': None, 'hgcmd': '', 'inc': [], 'exc': ['.hg*']} | |
106 |
|
105 | |||
107 | # store originals of monkeypatches to be done at end of reposetup |
|
|||
108 | # that is, only if needed |
|
|||
109 | _patchfile_init = patch.patchfile.__init__ |
|
|||
110 | _patch_diff = patch.diff |
|
|||
111 | _webcommands_changeset = webcommands.changeset |
|
|||
112 | _webcommands_filediff = webcommands.filediff |
|
|||
113 |
|
||||
114 | def _kwpatchfile_init(self, ui, fname, missing=False): |
|
|||
115 | '''Monkeypatch/wrap patch.patchfile.__init__ to avoid |
|
|||
116 | rejects or conflicts due to expanded keywords in working dir.''' |
|
|||
117 | _patchfile_init(self, ui, fname, missing=missing) |
|
|||
118 | # shrink keywords read from working dir |
|
|||
119 | kwt = kwtools['templater'] |
|
|||
120 | self.lines = kwt.shrinklines(self.fname, self.lines) |
|
|||
121 |
|
||||
122 | def _kw_diff(repo, node1=None, node2=None, files=None, match=util.always, |
|
|||
123 | fp=None, changes=None, opts=None): |
|
|||
124 | '''Monkeypatch patch.diff to avoid expansion except when |
|
|||
125 | comparing against working dir.''' |
|
|||
126 | if node2 is not None: |
|
|||
127 | kwtools['templater'].matcher = util.never |
|
|||
128 | elif node1 is not None and node1 != repo.changectx().node(): |
|
|||
129 | kwtools['templater'].restrict = True |
|
|||
130 | _patch_diff(repo, node1=node1, node2=node2, files=files, match=match, |
|
|||
131 | fp=fp, changes=changes, opts=opts) |
|
|||
132 |
|
||||
133 | def _kwweb_changeset(web, req, tmpl): |
|
|||
134 | '''Wraps webcommands.changeset turning off keyword expansion.''' |
|
|||
135 | kwtools['templater'].matcher = util.never |
|
|||
136 | return _webcommands_changeset(web, req, tmpl) |
|
|||
137 |
|
||||
138 | def _kwweb_filediff(web, req, tmpl): |
|
|||
139 | '''Wraps webcommands.filediff turning off keyword expansion.''' |
|
|||
140 | kwtools['templater'].matcher = util.never |
|
|||
141 | return _webcommands_filediff(web, req, tmpl) |
|
|||
142 |
|
||||
143 |
|
106 | |||
144 | class kwtemplater(object): |
|
107 | class kwtemplater(object): | |
145 | ''' |
|
108 | ''' | |
@@ -265,9 +228,9 b' class kwfilelog(filelog.filelog):' | |||||
265 | Subclass of filelog to hook into its read, add, cmp methods. |
|
228 | Subclass of filelog to hook into its read, add, cmp methods. | |
266 | Keywords are "stored" unexpanded, and processed on reading. |
|
229 | Keywords are "stored" unexpanded, and processed on reading. | |
267 | ''' |
|
230 | ''' | |
268 | def __init__(self, opener, path): |
|
231 | def __init__(self, opener, kwt, path): | |
269 | super(kwfilelog, self).__init__(opener, path) |
|
232 | super(kwfilelog, self).__init__(opener, path) | |
270 |
self.kwt = kwt |
|
233 | self.kwt = kwt | |
271 | self.path = path |
|
234 | self.path = path | |
272 |
|
235 | |||
273 | def read(self, node): |
|
236 | def read(self, node): | |
@@ -469,8 +432,7 b' def reposetup(ui, repo):' | |||||
469 | if file matches user configuration. |
|
432 | if file matches user configuration. | |
470 | Wraps commit to overwrite configured files with updated |
|
433 | Wraps commit to overwrite configured files with updated | |
471 | keyword substitutions. |
|
434 | keyword substitutions. | |
472 | This is done for local repos only, and only if there are |
|
435 | Monkeypatches patch and webcommands.''' | |
473 | files configured at all for keyword substitution.''' |
|
|||
474 |
|
436 | |||
475 | try: |
|
437 | try: | |
476 | if (not repo.local() or not kwtools['inc'] |
|
438 | if (not repo.local() or not kwtools['inc'] | |
@@ -487,7 +449,7 b' def reposetup(ui, repo):' | |||||
487 | def file(self, f): |
|
449 | def file(self, f): | |
488 | if f[0] == '/': |
|
450 | if f[0] == '/': | |
489 | f = f[1:] |
|
451 | f = f[1:] | |
490 | return kwfilelog(self.sopener, f) |
|
452 | return kwfilelog(self.sopener, kwt, f) | |
491 |
|
453 | |||
492 | def wread(self, filename): |
|
454 | def wread(self, filename): | |
493 | data = super(kwrepo, self).wread(filename) |
|
455 | data = super(kwrepo, self).wread(filename) | |
@@ -536,11 +498,46 b' def reposetup(ui, repo):' | |||||
536 | finally: |
|
498 | finally: | |
537 | del wlock, lock |
|
499 | del wlock, lock | |
538 |
|
500 | |||
|
501 | # monkeypatches | |||
|
502 | def kwpatchfile_init(self, ui, fname, missing=False): | |||
|
503 | '''Monkeypatch/wrap patch.patchfile.__init__ to avoid | |||
|
504 | rejects or conflicts due to expanded keywords in working dir.''' | |||
|
505 | patchfile_init(self, ui, fname, missing=missing) | |||
|
506 | # shrink keywords read from working dir | |||
|
507 | self.lines = kwt.shrinklines(self.fname, self.lines) | |||
|
508 | ||||
|
509 | def kw_diff(repo, node1=None, node2=None, files=None, match=util.always, | |||
|
510 | fp=None, changes=None, opts=None): | |||
|
511 | '''Monkeypatch patch.diff to avoid expansion except when | |||
|
512 | comparing against working dir.''' | |||
|
513 | if node2 is not None: | |||
|
514 | kwt.matcher = util.never | |||
|
515 | elif node1 is not None and node1 != repo.changectx().node(): | |||
|
516 | kwt.restrict = True | |||
|
517 | patch_diff(repo, node1=node1, node2=node2, files=files, match=match, | |||
|
518 | fp=fp, changes=changes, opts=opts) | |||
|
519 | ||||
|
520 | def kwweb_changeset(web, req, tmpl): | |||
|
521 | '''Wraps webcommands.changeset turning off keyword expansion.''' | |||
|
522 | kwt.matcher = util.never | |||
|
523 | return webcommands_changeset(web, req, tmpl) | |||
|
524 | ||||
|
525 | def kwweb_filediff(web, req, tmpl): | |||
|
526 | '''Wraps webcommands.filediff turning off keyword expansion.''' | |||
|
527 | kwt.matcher = util.never | |||
|
528 | return webcommands_filediff(web, req, tmpl) | |||
|
529 | ||||
539 | repo.__class__ = kwrepo |
|
530 | repo.__class__ = kwrepo | |
540 | patch.patchfile.__init__ = _kwpatchfile_init |
|
531 | ||
541 | patch.diff = _kw_diff |
|
532 | patchfile_init = patch.patchfile.__init__ | |
542 | webcommands.changeset = webcommands.rev = _kwweb_changeset |
|
533 | patch_diff = patch.diff | |
543 |
webcommands |
|
534 | webcommands_changeset = webcommands.changeset | |
|
535 | webcommands_filediff = webcommands.filediff | |||
|
536 | ||||
|
537 | patch.patchfile.__init__ = kwpatchfile_init | |||
|
538 | patch.diff = kw_diff | |||
|
539 | webcommands.changeset = webcommands.rev = kwweb_changeset | |||
|
540 | webcommands.filediff = webcommands.diff = kwweb_filediff | |||
544 |
|
541 | |||
545 |
|
542 | |||
546 | cmdtable = { |
|
543 | cmdtable = { |
General Comments 0
You need to be logged in to leave comments.
Login now