author | Patrick Mezard <pmezard@gmail.com> |
Sun, 08 May 2011 17:48:30 +0200 | |
changeset 14259 | df9ccd39828c |
permissions | -rw-r--r-- |
14259
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
1 |
# wdutil.py - working dir utilities |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
2 |
# |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
3 |
# Copyright 2011 Patrick Mezard <pmezard@gmail.com> |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
4 |
# |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
6 |
# GNU General Public License version 2 or any later version. |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
7 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
8 |
import glob, os |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
9 |
import util, similar, scmutil |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
10 |
import match as matchmod |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
11 |
from i18n import _ |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
12 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
13 |
def expandpats(pats): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
14 |
if not util.expandglobs: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
15 |
return list(pats) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
16 |
ret = [] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
17 |
for p in pats: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
18 |
kind, name = matchmod._patsplit(p, None) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
19 |
if kind is None: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
20 |
try: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
21 |
globbed = glob.glob(name) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
22 |
except re.error: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
23 |
globbed = [name] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
24 |
if globbed: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
25 |
ret.extend(globbed) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
26 |
continue |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
27 |
ret.append(p) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
28 |
return ret |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
29 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
30 |
def match(repo, pats=[], opts={}, globbed=False, default='relpath'): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
31 |
if pats == ("",): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
32 |
pats = [] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
33 |
if not globbed and default == 'relpath': |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
34 |
pats = expandpats(pats or []) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
35 |
m = matchmod.match(repo.root, repo.getcwd(), pats, |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
36 |
opts.get('include'), opts.get('exclude'), default, |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
37 |
auditor=repo.auditor) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
38 |
def badfn(f, msg): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
39 |
repo.ui.warn("%s: %s\n" % (m.rel(f), msg)) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
40 |
m.bad = badfn |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
41 |
return m |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
42 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
43 |
def matchall(repo): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
44 |
return matchmod.always(repo.root, repo.getcwd()) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
45 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
46 |
def matchfiles(repo, files): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
47 |
return matchmod.exact(repo.root, repo.getcwd(), files) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
48 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
49 |
def addremove(repo, pats=[], opts={}, dry_run=None, similarity=None): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
50 |
if dry_run is None: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
51 |
dry_run = opts.get('dry_run') |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
52 |
if similarity is None: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
53 |
similarity = float(opts.get('similarity') or 0) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
54 |
# we'd use status here, except handling of symlinks and ignore is tricky |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
55 |
added, unknown, deleted, removed = [], [], [], [] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
56 |
audit_path = scmutil.pathauditor(repo.root) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
57 |
m = match(repo, pats, opts) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
58 |
for abs in repo.walk(m): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
59 |
target = repo.wjoin(abs) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
60 |
good = True |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
61 |
try: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
62 |
audit_path(abs) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
63 |
except (OSError, util.Abort): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
64 |
good = False |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
65 |
rel = m.rel(abs) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
66 |
exact = m.exact(abs) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
67 |
if good and abs not in repo.dirstate: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
68 |
unknown.append(abs) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
69 |
if repo.ui.verbose or not exact: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
70 |
repo.ui.status(_('adding %s\n') % ((pats and rel) or abs)) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
71 |
elif repo.dirstate[abs] != 'r' and (not good or not os.path.lexists(target) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
72 |
or (os.path.isdir(target) and not os.path.islink(target))): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
73 |
deleted.append(abs) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
74 |
if repo.ui.verbose or not exact: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
75 |
repo.ui.status(_('removing %s\n') % ((pats and rel) or abs)) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
76 |
# for finding renames |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
77 |
elif repo.dirstate[abs] == 'r': |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
78 |
removed.append(abs) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
79 |
elif repo.dirstate[abs] == 'a': |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
80 |
added.append(abs) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
81 |
copies = {} |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
82 |
if similarity > 0: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
83 |
for old, new, score in similar.findrenames(repo, |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
84 |
added + unknown, removed + deleted, similarity): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
85 |
if repo.ui.verbose or not m.exact(old) or not m.exact(new): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
86 |
repo.ui.status(_('recording removal of %s as rename to %s ' |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
87 |
'(%d%% similar)\n') % |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
88 |
(m.rel(old), m.rel(new), score * 100)) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
89 |
copies[new] = old |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
90 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
91 |
if not dry_run: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
92 |
wctx = repo[None] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
93 |
wlock = repo.wlock() |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
94 |
try: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
95 |
wctx.remove(deleted) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
96 |
wctx.add(unknown) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
97 |
for new, old in copies.iteritems(): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
98 |
wctx.copy(old, new) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
99 |
finally: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
100 |
wlock.release() |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
101 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
102 |
def updatedir(ui, repo, patches, similarity=0): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
103 |
'''Update dirstate after patch application according to metadata''' |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
104 |
if not patches: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
105 |
return [] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
106 |
copies = [] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
107 |
removes = set() |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
108 |
cfiles = patches.keys() |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
109 |
cwd = repo.getcwd() |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
110 |
if cwd: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
111 |
cfiles = [util.pathto(repo.root, cwd, f) for f in patches.keys()] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
112 |
for f in patches: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
113 |
gp = patches[f] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
114 |
if not gp: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
115 |
continue |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
116 |
if gp.op == 'RENAME': |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
117 |
copies.append((gp.oldpath, gp.path)) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
118 |
removes.add(gp.oldpath) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
119 |
elif gp.op == 'COPY': |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
120 |
copies.append((gp.oldpath, gp.path)) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
121 |
elif gp.op == 'DELETE': |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
122 |
removes.add(gp.path) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
123 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
124 |
wctx = repo[None] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
125 |
for src, dst in copies: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
126 |
dirstatecopy(ui, repo, wctx, src, dst, cwd=cwd) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
127 |
if (not similarity) and removes: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
128 |
wctx.remove(sorted(removes), True) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
129 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
130 |
for f in patches: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
131 |
gp = patches[f] |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
132 |
if gp and gp.mode: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
133 |
islink, isexec = gp.mode |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
134 |
dst = repo.wjoin(gp.path) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
135 |
# patch won't create empty files |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
136 |
if gp.op == 'ADD' and not os.path.lexists(dst): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
137 |
flags = (isexec and 'x' or '') + (islink and 'l' or '') |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
138 |
repo.wwrite(gp.path, '', flags) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
139 |
util.setflags(dst, islink, isexec) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
140 |
addremove(repo, cfiles, similarity=similarity) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
141 |
files = patches.keys() |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
142 |
files.extend([r for r in removes if r not in files]) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
143 |
return sorted(files) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
144 |
|
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
145 |
def dirstatecopy(ui, repo, wctx, src, dst, dryrun=False, cwd=None): |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
146 |
"""Update the dirstate to reflect the intent of copying src to dst. For |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
147 |
different reasons it might not end with dst being marked as copied from src. |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
148 |
""" |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
149 |
origsrc = repo.dirstate.copied(src) or src |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
150 |
if dst == origsrc: # copying back a copy? |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
151 |
if repo.dirstate[dst] not in 'mn' and not dryrun: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
152 |
repo.dirstate.normallookup(dst) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
153 |
else: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
154 |
if repo.dirstate[origsrc] == 'a' and origsrc == src: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
155 |
if not ui.quiet: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
156 |
ui.warn(_("%s has not been committed yet, so no copy " |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
157 |
"data will be stored for %s.\n") |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
158 |
% (repo.pathto(origsrc, cwd), repo.pathto(dst, cwd))) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
159 |
if repo.dirstate[dst] in '?r' and not dryrun: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
160 |
wctx.add([dst]) |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
161 |
elif not dryrun: |
df9ccd39828c
patch: move updatedir() from cmdutil into patch
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
162 |
wctx.copy(origsrc, dst) |