Mercurial > hgsubversion
annotate hgsubversion/editor.py @ 935:1de83496df4e
subvertpy_wrapper: fix files and directories batons handling
The subvertpy wrapper was not recording and passing back the batons
returned by calls such as open_file() or open_directory(). Instead, it
was relying on knowledge about the HgEditor class and was passing the
path argument. Its behaviour was therefore not exactly the same as the
swig one because HgEditor sometimes tests the input baton and skips
None ones, usually generated for ignored entries.
Also, AbstractEditor was translating open_root() into
open_directory(''), while the former, not implemented by HgEditor, was
supplied as a default implementation by the swig bindings. The behaviour
was different again.
This patch was not motivated by any known bug but batons are interesting
as they help control edited entries lifetime. We may use them to reduce
replay mode memory consumption.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Sun, 23 Sep 2012 19:42:34 +0200 |
parents | 63d6484c43ba |
children | fb6f6b7fa5a5 |
rev | line source |
---|---|
633
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
1 import errno |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
2 import cStringIO |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
3 import sys |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
4 |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
5 from mercurial import util as hgutil |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
6 from mercurial import revlog |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
7 from mercurial import node |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
8 |
601
0fe490ce2fbb
isolate all imports of Subversion modules in svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
591
diff
changeset
|
9 import svnwrap |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
10 import util |
792
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
11 import svnexternals |
34
50d55c3e0d85
Some refactors of the previous change, including transparent upgrade of old-style pickled dictionaries.
Augie Fackler <durin42@gmail.com>
parents:
33
diff
changeset
|
12 |
862
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
13 class NeverClosingStringIO(object): |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
14 def __init__(self): |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
15 self._fp = cStringIO.StringIO() |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
16 |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
17 def __getattr__(self, name): |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
18 return getattr(self._fp, name) |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
19 |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
20 def close(self): |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
21 # svn 1.7 apply_delta driver now calls close() on passed file |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
22 # object which prevent us from calling getvalue() afterwards. |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
23 pass |
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
24 |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
25 class RevisionData(object): |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
26 |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
27 __slots__ = [ |
901
bd12a4da0f35
replay: workaround svn not telling us about x/l flags (issue346)
Bryan O'Sullivan <bryano@fb.com>
parents:
891
diff
changeset
|
28 'file', 'added', 'files', 'deleted', 'rev', 'execfiles', 'symlinks', 'batons', |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
29 'copies', 'missing', 'emptybranches', 'base', 'externals', 'ui', |
528
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
521
diff
changeset
|
30 'exception', |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
31 ] |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
32 |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
33 def __init__(self, ui): |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
34 self.ui = ui |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
35 self.clear() |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
36 |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
37 def clear(self): |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
38 self.file = None |
901
bd12a4da0f35
replay: workaround svn not telling us about x/l flags (issue346)
Bryan O'Sullivan <bryano@fb.com>
parents:
891
diff
changeset
|
39 self.added = set() |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
40 self.files = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
41 self.deleted = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
42 self.rev = None |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
43 self.execfiles = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
44 self.symlinks = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
45 self.batons = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
46 # Map fully qualified destination file paths to module source path |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
47 self.copies = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
48 self.missing = set() |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
49 self.emptybranches = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
50 self.externals = {} |
434
3e2259fe3c93
editor: move exception data into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
433
diff
changeset
|
51 self.exception = None |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
52 |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
53 def set(self, path, data, isexec=False, islink=False): |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
54 self.files[path] = data |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
55 self.execfiles[path] = isexec |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
56 self.symlinks[path] = islink |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
57 if path in self.deleted: |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
58 del self.deleted[path] |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
59 if path in self.missing: |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
60 self.missing.remove(path) |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
61 |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
62 def delete(self, path): |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
63 self.deleted[path] = True |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
64 if path in self.files: |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
65 del self.files[path] |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
66 self.execfiles[path] = False |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
67 self.symlinks[path] = False |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
68 self.ui.note('D %s\n' % path) |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
69 |
436
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
70 def findmissing(self, svn): |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
71 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
72 if not self.missing: |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
73 return |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
74 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
75 msg = 'fetching %s files that could not use replay.\n' |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
76 self.ui.debug(msg % len(self.missing)) |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
77 root = svn.subdir and svn.subdir[1:] or '' |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
78 r = self.rev.revnum |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
79 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
80 files = set() |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
81 for p in self.missing: |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
82 self.ui.note('.') |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
83 self.ui.flush() |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
84 if p[-1] == '/': |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
85 dir = p[len(root):] |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
498
diff
changeset
|
86 new = [p + f for f, k in svn.list_files(dir, r) if k == 'f'] |
436
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
87 files.update(new) |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
88 else: |
591
4359ddd73b00
strip off root file name only once for missing files
Gerhard Weis <gweis@gmx.at>
parents:
587
diff
changeset
|
89 files.add(p) |
436
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
90 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
91 i = 1 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
92 self.ui.note('\nfetching files...\n') |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
93 for p in files: |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
94 self.ui.note('.') |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
95 self.ui.flush() |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
96 if i % 50 == 0: |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
97 svn.init_ra_and_client() |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
98 i += 1 |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
498
diff
changeset
|
99 data, mode = svn.get_file(p[len(root):], r) |
436
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
100 self.set(p, data, 'x' in mode, 'l' in mode) |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
101 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
102 self.missing = set() |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
103 self.ui.note('\n') |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
104 |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
105 |
601
0fe490ce2fbb
isolate all imports of Subversion modules in svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
591
diff
changeset
|
106 class HgEditor(svnwrap.Editor): |
33
a9c15cae50e5
Faster append-only revmap implementation.
Andreas Hartmetz <ahartmetz@gmail.com>
parents:
23
diff
changeset
|
107 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
108 def __init__(self, meta): |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
109 self.meta = meta |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
110 self.ui = meta.ui |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
111 self.repo = meta.repo |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
112 self.current = RevisionData(meta.ui) |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
113 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
114 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
115 def delete_entry(self, path, revision_bogus, parent_baton, pool=None): |
545
ebd8fb1a05e4
clean up trailing whitespace
Augie Fackler <durin42@gmail.com>
parents:
540
diff
changeset
|
116 br_path, branch = self.meta.split_branch_path(path)[:2] |
133
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
117 if br_path == '': |
540
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
118 if self.meta.get_path_tag(path): |
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
119 # Tag deletion is not handled as branched deletion |
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
120 return |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
121 self.meta.closebranches.add(branch) |
116
30580c05dccc
hg_delta_editor: merge _is_path_valid() and _path_and_branch_from_path()
Patrick Mezard <pmezard@gmail.com>
parents:
111
diff
changeset
|
122 if br_path is not None: |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
123 ha = self.meta.get_parent_revision(self.current.rev.revnum, branch) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
124 if ha == revlog.nullid: |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
125 return |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
126 ctx = self.repo.changectx(ha) |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
127 if br_path not in ctx: |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
128 br_path2 = '' |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
129 if br_path != '': |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
130 br_path2 = br_path + '/' |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
131 # assuming it is a directory |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
132 self.current.externals[path] = None |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
133 map(self.current.delete, [pat for pat in self.current.files.iterkeys() |
832
e9af7eba88db
globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents:
792
diff
changeset
|
134 if pat.startswith(path + '/')]) |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
135 for f in ctx.walk(util.PrefixMatch(br_path2)): |
39
b3c7b844b782
Some more fixes of cases discovered in the melange repo. If anyone knows how I can reproduce a "replaced" state in Subversion, I'd love to be able to make a real test case for this code.
Augie Fackler <durin42@gmail.com>
parents:
38
diff
changeset
|
136 f_p = '%s/%s' % (path, f[len(br_path2):]) |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
137 if f_p not in self.current.files: |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
138 self.current.delete(f_p) |
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
139 self.current.delete(path) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
140 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
141 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
142 def open_file(self, path, parent_baton, base_revision, p=None): |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
143 self.current.file = None |
420
59e19c73b0df
svnmeta: eliminate unneeded path_and_branch_for_path() method
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
418
diff
changeset
|
144 fpath, branch = self.meta.split_branch_path(path)[:2] |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
145 if not fpath: |
322
05cd4a5138bf
Move some .warn() calls to noisy levels instead.
Augie Fackler <durin42@gmail.com>
parents:
321
diff
changeset
|
146 self.ui.debug('WARNING: Opening non-existant file %s\n' % path) |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
147 return |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
148 |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
149 self.current.file = path |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
150 self.ui.note('M %s\n' % path) |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
151 |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
152 if self.current.file in self.current.files: |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
153 return |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
154 |
586
704d2ce1d906
editor: fix open_file() on replaced branch
Patrick Mezard <pmezard@gmail.com>
parents:
585
diff
changeset
|
155 if not self.meta.is_path_valid(path): |
704d2ce1d906
editor: fix open_file() on replaced branch
Patrick Mezard <pmezard@gmail.com>
parents:
585
diff
changeset
|
156 return |
704d2ce1d906
editor: fix open_file() on replaced branch
Patrick Mezard <pmezard@gmail.com>
parents:
585
diff
changeset
|
157 |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
158 baserev = base_revision |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
159 if baserev is None or baserev == -1: |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
160 baserev = self.current.rev.revnum - 1 |
586
704d2ce1d906
editor: fix open_file() on replaced branch
Patrick Mezard <pmezard@gmail.com>
parents:
585
diff
changeset
|
161 # Use exact=True because during replacements ('R' action) we select |
704d2ce1d906
editor: fix open_file() on replaced branch
Patrick Mezard <pmezard@gmail.com>
parents:
585
diff
changeset
|
162 # replacing branch as parent, but svn delta editor provides delta |
704d2ce1d906
editor: fix open_file() on replaced branch
Patrick Mezard <pmezard@gmail.com>
parents:
585
diff
changeset
|
163 # agains replaced branch. |
704d2ce1d906
editor: fix open_file() on replaced branch
Patrick Mezard <pmezard@gmail.com>
parents:
585
diff
changeset
|
164 parent = self.meta.get_parent_revision(baserev + 1, branch, True) |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
165 ctx = self.repo[parent] |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
166 if fpath not in ctx: |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
167 self.current.missing.add(path) |
586
704d2ce1d906
editor: fix open_file() on replaced branch
Patrick Mezard <pmezard@gmail.com>
parents:
585
diff
changeset
|
168 return |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
169 |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
170 fctx = ctx.filectx(fpath) |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
171 base = fctx.data() |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
172 if 'l' in fctx.flags(): |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
173 base = 'link ' + base |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
174 self.current.set(path, base, 'x' in fctx.flags(), 'l' in fctx.flags()) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
175 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
176 @svnwrap.ieditor |
300
4aba7542f6a9
Various cleanups, cosmetics and removal of superfluous assertions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
299
diff
changeset
|
177 def add_file(self, path, parent_baton=None, copyfrom_path=None, |
4aba7542f6a9
Various cleanups, cosmetics and removal of superfluous assertions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
299
diff
changeset
|
178 copyfrom_revision=None, file_pool=None): |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
179 self.current.file = None |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
180 if path in self.current.deleted: |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
181 del self.current.deleted[path] |
420
59e19c73b0df
svnmeta: eliminate unneeded path_and_branch_for_path() method
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
418
diff
changeset
|
182 fpath, branch = self.meta.split_branch_path(path, existing=False)[:2] |
67
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
183 if not fpath: |
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
184 return |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
436
diff
changeset
|
185 if (branch not in self.meta.branches and |
517
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
186 not self.meta.get_path_tag(self.meta.remotename(branch))): |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
187 # we know this branch will exist now, because it has at least one file. Rock. |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
188 self.meta.branches[branch] = None, 0, self.current.rev.revnum |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
189 self.current.file = path |
67
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
190 if not copyfrom_path: |
186
6266ba36ee15
Create patch to make normal output much less verbose…
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
181
diff
changeset
|
191 self.ui.note('A %s\n' % path) |
901
bd12a4da0f35
replay: workaround svn not telling us about x/l flags (issue346)
Bryan O'Sullivan <bryano@fb.com>
parents:
891
diff
changeset
|
192 self.current.added.add(path) |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
193 self.current.set(path, '', False, False) |
67
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
194 return |
186
6266ba36ee15
Create patch to make normal output much less verbose…
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
181
diff
changeset
|
195 self.ui.note('A+ %s\n' % path) |
67
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
196 (from_file, |
420
59e19c73b0df
svnmeta: eliminate unneeded path_and_branch_for_path() method
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
418
diff
changeset
|
197 from_branch) = self.meta.split_branch_path(copyfrom_path)[:2] |
67
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
198 if not from_file: |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
199 self.current.missing.add(path) |
67
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
200 return |
585
c3ba4ca81d16
editor: fix replaced files content in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
582
diff
changeset
|
201 # Use exact=True because during replacements ('R' action) we select |
c3ba4ca81d16
editor: fix replaced files content in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
582
diff
changeset
|
202 # replacing branch as parent, but svn delta editor provides delta |
c3ba4ca81d16
editor: fix replaced files content in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
582
diff
changeset
|
203 # agains replaced branch. |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
204 ha = self.meta.get_parent_revision(copyfrom_revision + 1, |
585
c3ba4ca81d16
editor: fix replaced files content in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
582
diff
changeset
|
205 from_branch, True) |
67
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
206 ctx = self.repo.changectx(ha) |
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
207 if from_file in ctx: |
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
208 fctx = ctx.filectx(from_file) |
97
0d3a2a7cefa3
hg_delta_editor: fix symlink prefix confusion
Patrick Mezard <pmezard@gmail.com>
parents:
73
diff
changeset
|
209 flags = fctx.flags() |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
210 self.current.set(path, fctx.data(), 'x' in flags, 'l' in flags) |
582
44c56a7727c4
editor: fix issamefile() and copy detection in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
545
diff
changeset
|
211 if from_branch == branch: |
44c56a7727c4
editor: fix issamefile() and copy detection in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
545
diff
changeset
|
212 parentid = self.meta.get_parent_revision( |
44c56a7727c4
editor: fix issamefile() and copy detection in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
545
diff
changeset
|
213 self.current.rev.revnum, branch) |
44c56a7727c4
editor: fix issamefile() and copy detection in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
545
diff
changeset
|
214 if parentid != revlog.nullid: |
44c56a7727c4
editor: fix issamefile() and copy detection in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
545
diff
changeset
|
215 parentctx = self.repo.changectx(parentid) |
44c56a7727c4
editor: fix issamefile() and copy detection in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
545
diff
changeset
|
216 if util.issamefile(parentctx, ctx, from_file): |
44c56a7727c4
editor: fix issamefile() and copy detection in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
545
diff
changeset
|
217 self.current.copies[path] = from_file |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
218 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
219 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
220 def add_directory(self, path, parent_baton, copyfrom_path, |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
221 copyfrom_revision, dir_pool=None): |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
222 self.current.batons[path] = path |
420
59e19c73b0df
svnmeta: eliminate unneeded path_and_branch_for_path() method
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
418
diff
changeset
|
223 br_path, branch = self.meta.split_branch_path(path)[:2] |
116
30580c05dccc
hg_delta_editor: merge _is_path_valid() and _path_and_branch_from_path()
Patrick Mezard <pmezard@gmail.com>
parents:
111
diff
changeset
|
224 if br_path is not None: |
30580c05dccc
hg_delta_editor: merge _is_path_valid() and _path_and_branch_from_path()
Patrick Mezard <pmezard@gmail.com>
parents:
111
diff
changeset
|
225 if not copyfrom_path and not br_path: |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
226 self.current.emptybranches[branch] = True |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
227 else: |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
228 self.current.emptybranches[branch] = False |
116
30580c05dccc
hg_delta_editor: merge _is_path_valid() and _path_and_branch_from_path()
Patrick Mezard <pmezard@gmail.com>
parents:
111
diff
changeset
|
229 if br_path is None or not copyfrom_path: |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
230 return path |
521
839734dfb5c7
Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
518
diff
changeset
|
231 if self.meta.get_path_tag(path): |
839734dfb5c7
Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
518
diff
changeset
|
232 del self.current.emptybranches[branch] |
839734dfb5c7
Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
518
diff
changeset
|
233 return path |
518
e37738d95b27
editor: remove useless test
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
234 tag = self.meta.get_path_tag(copyfrom_path) |
e37738d95b27
editor: remove useless test
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
235 if tag not in self.meta.tags: |
e37738d95b27
editor: remove useless test
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
236 tag = None |
e37738d95b27
editor: remove useless test
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
237 if not self.meta.is_path_valid(copyfrom_path): |
e37738d95b27
editor: remove useless test
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
238 self.current.missing.add('%s/' % path) |
e37738d95b27
editor: remove useless test
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
239 return path |
59
430af23bef4a
Performance fix for branches-from-tags in real replay, which is tied up with
Augie Fackler <durin42@gmail.com>
parents:
55
diff
changeset
|
240 if tag: |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
241 changeid = self.meta.tags[tag] |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
242 source_rev, source_branch = self.meta.get_source_rev(changeid)[:2] |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
243 frompath = '' |
59
430af23bef4a
Performance fix for branches-from-tags in real replay, which is tied up with
Augie Fackler <durin42@gmail.com>
parents:
55
diff
changeset
|
244 else: |
430af23bef4a
Performance fix for branches-from-tags in real replay, which is tied up with
Augie Fackler <durin42@gmail.com>
parents:
55
diff
changeset
|
245 source_rev = copyfrom_revision |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
246 frompath, source_branch = self.meta.split_branch_path(copyfrom_path)[:2] |
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
247 if frompath == '' and br_path == '': |
217
6eb691a163cd
hg_delta_editor: stop using foobaz as a bogus filename.
Augie Fackler <durin42@gmail.com>
parents:
214
diff
changeset
|
248 assert br_path is not None |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
249 tmp = source_branch, source_rev, self.current.rev.revnum |
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
250 self.meta.branches[branch] = tmp |
587
c06f59441f8e
editor: fix replaced directory copies
Patrick Mezard <pmezard@gmail.com>
parents:
586
diff
changeset
|
251 new_hash = self.meta.get_parent_revision(source_rev + 1, source_branch, True) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
252 if new_hash == node.nullid: |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
253 self.current.missing.add('%s/' % path) |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
254 return path |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
255 fromctx = self.repo.changectx(new_hash) |
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
256 if frompath != '/' and frompath != '': |
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
257 frompath = '%s/' % frompath |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
258 else: |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
259 frompath = '' |
69
63ece4ea25c9
hg_delta_editor: register copies only if files are unchanged between source and dest
Patrick Mezard <pmezard@gmail.com>
parents:
67
diff
changeset
|
260 copies = {} |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
261 for f in fromctx: |
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
262 if not f.startswith(frompath): |
69
63ece4ea25c9
hg_delta_editor: register copies only if files are unchanged between source and dest
Patrick Mezard <pmezard@gmail.com>
parents:
67
diff
changeset
|
263 continue |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
264 fctx = fromctx.filectx(f) |
791
05ee7d5351de
editor: simplify add_directory() a bit more
Patrick Mezard <pmezard@gmail.com>
parents:
790
diff
changeset
|
265 dest = path + '/' + f[len(frompath):] |
05ee7d5351de
editor: simplify add_directory() a bit more
Patrick Mezard <pmezard@gmail.com>
parents:
790
diff
changeset
|
266 self.current.set(dest, fctx.data(), 'x' in fctx.flags(), 'l' in fctx.flags()) |
05ee7d5351de
editor: simplify add_directory() a bit more
Patrick Mezard <pmezard@gmail.com>
parents:
790
diff
changeset
|
267 if dest in self.current.deleted: |
05ee7d5351de
editor: simplify add_directory() a bit more
Patrick Mezard <pmezard@gmail.com>
parents:
790
diff
changeset
|
268 del self.current.deleted[dest] |
69
63ece4ea25c9
hg_delta_editor: register copies only if files are unchanged between source and dest
Patrick Mezard <pmezard@gmail.com>
parents:
67
diff
changeset
|
269 if branch == source_branch: |
791
05ee7d5351de
editor: simplify add_directory() a bit more
Patrick Mezard <pmezard@gmail.com>
parents:
790
diff
changeset
|
270 copies[dest] = f |
69
63ece4ea25c9
hg_delta_editor: register copies only if files are unchanged between source and dest
Patrick Mezard <pmezard@gmail.com>
parents:
67
diff
changeset
|
271 if copies: |
63ece4ea25c9
hg_delta_editor: register copies only if files are unchanged between source and dest
Patrick Mezard <pmezard@gmail.com>
parents:
67
diff
changeset
|
272 # Preserve the directory copy records if no file was changed between |
63ece4ea25c9
hg_delta_editor: register copies only if files are unchanged between source and dest
Patrick Mezard <pmezard@gmail.com>
parents:
67
diff
changeset
|
273 # the source and destination revisions, or discard it completely. |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
274 parentid = self.meta.get_parent_revision(self.current.rev.revnum, branch) |
69
63ece4ea25c9
hg_delta_editor: register copies only if files are unchanged between source and dest
Patrick Mezard <pmezard@gmail.com>
parents:
67
diff
changeset
|
275 if parentid != revlog.nullid: |
63ece4ea25c9
hg_delta_editor: register copies only if files are unchanged between source and dest
Patrick Mezard <pmezard@gmail.com>
parents:
67
diff
changeset
|
276 parentctx = self.repo.changectx(parentid) |
496
5e0dfe59d4c3
copies: fix under-reporting of copies in hg
Augie Fackler <durin42@gmail.com>
parents:
448
diff
changeset
|
277 for k, v in copies.iteritems(): |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
278 if util.issamefile(parentctx, fromctx, v): |
528
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
521
diff
changeset
|
279 self.current.copies[k] = v |
792
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
280 # Copy the externals definitions of copied directories |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
281 fromext = svnexternals.parse(self.ui, fromctx) |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
282 for p, v in fromext.iteritems(): |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
283 pp = p and (p + '/') or '' |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
284 if pp.startswith(frompath): |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
285 dest = (path + '/' + pp[len(frompath):]).rstrip('/') |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
286 self.current.externals[dest] = v |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
287 return path |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
288 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
289 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
290 def change_file_prop(self, file_baton, name, value, pool=None): |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
291 if name == 'svn:executable': |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
292 self.current.execfiles[self.current.file] = bool(value is not None) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
293 elif name == 'svn:special': |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
294 self.current.symlinks[self.current.file] = bool(value is not None) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
295 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
296 @svnwrap.ieditor |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
297 def change_dir_prop(self, dir_baton, name, value, pool=None): |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
298 if dir_baton is None: |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
299 return |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
300 path = self.current.batons[dir_baton] |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
301 if name == 'svn:externals': |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
302 self.current.externals[path] = value |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
303 |
935
1de83496df4e
subvertpy_wrapper: fix files and directories batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
934
diff
changeset
|
304 @svnwrap.ieditor |
1de83496df4e
subvertpy_wrapper: fix files and directories batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
934
diff
changeset
|
305 def open_root(self, edit_baton, base_revision, dir_pool=None): |
1de83496df4e
subvertpy_wrapper: fix files and directories batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
934
diff
changeset
|
306 return None |
1de83496df4e
subvertpy_wrapper: fix files and directories batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
934
diff
changeset
|
307 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
308 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
309 def open_directory(self, path, parent_baton, base_revision, dir_pool=None): |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
310 self.current.batons[path] = path |
420
59e19c73b0df
svnmeta: eliminate unneeded path_and_branch_for_path() method
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
418
diff
changeset
|
311 p_, branch = self.meta.split_branch_path(path)[:2] |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
498
diff
changeset
|
312 if p_ == '' or (self.meta.layout == 'single' and p_): |
540
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
313 if not self.meta.get_path_tag(path): |
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
314 self.current.emptybranches[branch] = False |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
315 return path |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
316 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
317 @svnwrap.ieditor |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
318 def close_directory(self, dir_baton, dir_pool=None): |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
319 if dir_baton is not None: |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
320 del self.current.batons[dir_baton] |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
321 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
322 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
323 def apply_textdelta(self, file_baton, base_checksum, pool=None): |
211
05243ec295e1
fetch: Fix a bug that caused plaintexts to be interpreted as missing more often than they should be.
Augie Fackler <durin42@gmail.com>
parents:
207
diff
changeset
|
324 # We know coming in here the file must be one of the following options: |
05243ec295e1
fetch: Fix a bug that caused plaintexts to be interpreted as missing more often than they should be.
Augie Fackler <durin42@gmail.com>
parents:
207
diff
changeset
|
325 # 1) Deleted (invalid, fail an assertion) |
05243ec295e1
fetch: Fix a bug that caused plaintexts to be interpreted as missing more often than they should be.
Augie Fackler <durin42@gmail.com>
parents:
207
diff
changeset
|
326 # 2) Missing a base text (bail quick since we have to fetch a full plaintext) |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
327 # 3) Has a base text in self.current.files, apply deltas |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
328 base = '' |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
329 if not self.meta.is_path_valid(self.current.file): |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
330 return lambda x: None |
633
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
331 |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
332 if self.current.file in self.current.deleted: |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
333 msg = ('cannot apply textdelta to %s: file is deleted' |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
334 % self.current.file) |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
335 raise IOError(errno.ENOENT, msg) |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
336 |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
337 if (self.current.file not in self.current.files and |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
338 self.current.file not in self.current.missing): |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
339 msg = ('cannot apply textdelta to %s: file not found' |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
340 % self.current.file) |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
341 raise IOError(errno.ENOENT, msg) |
37b2adc64fb3
editor: convert two assertions in apply_textdelta() into raising an IOError
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
601
diff
changeset
|
342 |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
343 if self.current.file in self.current.missing: |
211
05243ec295e1
fetch: Fix a bug that caused plaintexts to be interpreted as missing more often than they should be.
Augie Fackler <durin42@gmail.com>
parents:
207
diff
changeset
|
344 return lambda x: None |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
345 base = self.current.files[self.current.file] |
862
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
346 target = NeverClosingStringIO() |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
347 self.stream = target |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
348 |
601
0fe490ce2fbb
isolate all imports of Subversion modules in svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
591
diff
changeset
|
349 handler = svnwrap.apply_txdelta(base, target) |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
832
diff
changeset
|
350 if not callable(handler): # pragma: no cover |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
351 raise hgutil.Abort('Error in Subversion bindings: ' |
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
352 'cannot call handler!') |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
353 def txdelt_window(window): |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
354 try: |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
355 if not self.meta.is_path_valid(self.current.file): |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
356 return |
932
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
357 try: |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
358 handler(window) |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
359 except AssertionError, e: # pragma: no cover |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
360 # Enhance the exception message |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
361 msg, others = e.args[0], e.args[1:] |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
362 |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
363 if msg: |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
364 msg += '\n' |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
365 |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
366 msg += _TXDELT_WINDOW_HANDLER_FAILURE_MSG |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
367 e.args = (msg,) + others |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
368 raise e |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
369 |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
370 # window being None means commit this file |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
371 if not window: |
862
6ef6c413d6de
editor: work around svn 1.7 closing the output fp in apply_textdelta()
Patrick Mezard <patrick@mezard.eu>
parents:
843
diff
changeset
|
372 self.current.files[self.current.file] = target.getvalue() |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
832
diff
changeset
|
373 except svnwrap.SubversionException, e: # pragma: no cover |
601
0fe490ce2fbb
isolate all imports of Subversion modules in svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
591
diff
changeset
|
374 if e.args[1] == svnwrap.ERR_INCOMPLETE_DATA: |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
375 self.current.missing.add(self.current.file) |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
832
diff
changeset
|
376 else: # pragma: no cover |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
377 raise hgutil.Abort(*e.args) |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
832
diff
changeset
|
378 except: # pragma: no cover |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
379 self._exception_info = sys.exc_info() |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
380 raise |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
381 return txdelt_window |
932
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
382 |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
383 _TXDELT_WINDOW_HANDLER_FAILURE_MSG = ( |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
384 "Your SVN repository may not be supplying correct replay deltas." |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
385 " It is strongly" |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
386 "\nadvised that you repull the entire SVN repository using" |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
387 " hg pull --stupid." |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
388 "\nAlternatively, re-pull just this revision using --stupid and verify" |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
389 " that the" |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
390 "\nchangeset is correct." |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
391 ) |