author | Christian Ebert <blacktrash@gmx.net> |
Sun, 17 Dec 2006 10:16:16 +0100 | |
branch | updatehook |
changeset 23 | 9fdf507badfc |
parent 21 | 536c1797202d |
child 24 | 1083d250d1b2 |
permissions | -rw-r--r-- |
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
1 |
# $Hg$ |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
2 |
|
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
3 |
from mercurial import demandimport |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
4 |
demandimport.enable() |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
5 |
|
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
6 |
from mercurial.i18n import _ |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
7 |
import mercurial.util, re |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
8 |
|
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
9 |
# name of keyword encode filter: |
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
10 |
kwencodefilter = 'hgkwencode' |
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
11 |
# look for <Dollar>Hg<Dollar> |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
12 |
kwtrigger = '%sHg$' % '$' |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
13 |
|
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
14 |
def wwritekw(ui, repo, f, text): |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
15 |
'''Writes text with kwupdates keywords to f in working directory.''' |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
16 |
ui.note(_('expanding keywords in %s\n' % f)) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
17 |
# # backup file (?) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
18 |
# absfile = repo.wjoin(f) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
19 |
# mercurial.util.copyfile(absfile, absfile+'.kwbak') |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
20 |
repo.wfile(f, 'w').write(text) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
21 |
|
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
22 |
def expandkw(ui, repo, node, cid, candidates, update=False): |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
23 |
'''Important: returns False on success, True on failure.''' |
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
24 |
|
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
25 |
# only check files that have hgkwencode assigned as encode filter |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
26 |
files = [] |
23
9fdf507badfc
Double check encode filtered filenames
Christian Ebert <blacktrash@gmx.net>
parents:
21
diff
changeset
|
27 |
# python2.4: files = set() |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
28 |
for pat, cmd in repo.ui.configitems('encode'): |
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
29 |
if cmd.endswith(kwencodefilter): |
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
30 |
mf = mercurial.util.matcher(repo.root, '', [pat], [], [])[1] |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
31 |
for candidate in candidates: |
23
9fdf507badfc
Double check encode filtered filenames
Christian Ebert <blacktrash@gmx.net>
parents:
21
diff
changeset
|
32 |
if mf(candidate) and candidate not in files: |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
33 |
files.append(candidate) |
23
9fdf507badfc
Double check encode filtered filenames
Christian Ebert <blacktrash@gmx.net>
parents:
21
diff
changeset
|
34 |
# python2.4: |
9fdf507badfc
Double check encode filtered filenames
Christian Ebert <blacktrash@gmx.net>
parents:
21
diff
changeset
|
35 |
# if mf(candidate): files.add(candidate) |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
36 |
|
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
37 |
if not files: # nothing to do |
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
38 |
return False |
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
39 |
|
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
40 |
user, date = repo.changelog.read(node)[1:3] |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
41 |
user = mercurial.util.shortuser(user) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
42 |
date = mercurial.util.datestr(date=date, |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
43 |
format=mercurial.util.defaultdateformats[2]) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
44 |
# %Y-%m-%d %H:%M |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
45 |
|
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
46 |
# collect filenames that were changed by hg update |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
47 |
kwupdates = [] |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
48 |
|
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
49 |
for f in files: |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
50 |
|
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
51 |
text = repo.wfile(f).read() |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
52 |
kwrepl = '%sHg: %s,v %s %s %s $' % ('$', f, cid, date, user) |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
53 |
|
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
54 |
if update and text.find(kwtrigger) > -1: |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
55 |
text = text.replace(kwtrigger, kwrepl) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
56 |
wwritekw(ui, repo, f, text) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
57 |
kwupdates.append(f) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
58 |
|
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
59 |
elif not update: |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
60 |
re_kw = re.compile(r'[$]Hg(: %s,v [a-z0-9]{12} [^$]+? )?\$' % f) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
61 |
text, kwct = re_kw.subn(kwrepl, text) |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
62 |
if kwct: |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
63 |
wwritekw(ui, repo, f, text) |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
64 |
|
21
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
65 |
if kwupdates: |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
66 |
# cheat hg to believe that updated files were not modified |
536c1797202d
Implement $Hg$ scheme with update hook
Christian Ebert <blacktrash@gmx.net>
parents:
5
diff
changeset
|
67 |
repo.dirstate.update(kwupdates, 'n') |
5
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
68 |
|
85d1f5bf7cfc
updatehook branch: add kwexpander and updatekw modules
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
69 |
return False |