Mercurial > hgsubversion
annotate hgsubversion/editor.py @ 960:502613f6b583
editor: ignore added or copied files excluded by a filemap
Files brought by a copied add_directory() were processed despite being
excluded by the filemap. This was also the case with added files. The
conversion was still correct because they were eventually filtered out
in the replay.convert_rev() but processing them in itself may be
problematic. Filemaps are often use to exclude large binary files and
before this change, some of them could be marked as missing and be
fetched before being discarded.
A test configuration entry named hgsubversion.failoninvalidreplayfile
was added to help testing this case. It should become the default
behaviour in the future.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Sun, 14 Oct 2012 15:51:12 +0200 |
parents | 506dcb241cef |
children | 8648ccfb8325 |
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 sys |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
3 import tempfile |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
4 import shutil |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
5 import os |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
6 |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
7 from mercurial import util as hgutil |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
8 from mercurial import revlog |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
9 from mercurial import node |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
10 |
601
0fe490ce2fbb
isolate all imports of Subversion modules in svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
591
diff
changeset
|
11 import svnwrap |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
12 import util |
792
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
13 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
|
14 |
945
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
15 class EditingError(Exception): |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
16 pass |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
17 |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
18 class FileStore(object): |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
19 def __init__(self, maxsize=None): |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
20 self._tempdir = None |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
21 self._files = {} |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
22 self._created = 0 |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
23 self._maxsize = maxsize |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
24 if self._maxsize is None: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
25 self._maxsize = 100*(2**20) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
26 self._size = 0 |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
27 self._data = {} |
945
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
28 self._popped = set() |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
29 |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
30 def setfile(self, fname, data): |
945
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
31 if fname in self._popped: |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
32 raise EditingError('trying to set a popped file %s' % fname) |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
33 |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
34 if self._maxsize < 0 or (len(data) + self._size) <= self._maxsize: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
35 self._data[fname] = data |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
36 self._size += len(data) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
37 else: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
38 if self._tempdir is None: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
39 self._tempdir = tempfile.mkdtemp(prefix='hg-subversion-') |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
40 # Avoid filename issues with these simple names |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
41 fn = str(self._created) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
42 fp = hgutil.posixfile(os.path.join(self._tempdir, fn), 'wb') |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
43 try: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
44 fp.write(data) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
45 finally: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
46 fp.close() |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
47 self._created += 1 |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
48 self._files[fname] = fn |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
49 |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
50 def delfile(self, fname): |
945
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
51 if fname in self._popped: |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
52 raise EditingError('trying to delete a popped file %s' % fname) |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
53 |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
54 if fname in self._data: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
55 del self._data[fname] |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
56 elif fname in self._files: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
57 path = os.path.join(self._tempdir, self._files.pop(fname)) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
58 os.unlink(path) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
59 |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
60 def getfile(self, fname): |
945
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
61 if fname in self._popped: |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
62 raise EditingError('trying to get a popped file %s' % fname) |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
63 |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
64 if fname in self._data: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
65 return self._data[fname] |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
66 if self._tempdir is None or fname not in self._files: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
67 raise IOError |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
68 path = os.path.join(self._tempdir, self._files[fname]) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
69 fp = hgutil.posixfile(path, 'rb') |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
70 try: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
71 return fp.read() |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
72 finally: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
73 fp.close() |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
74 |
945
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
75 def popfile(self, fname): |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
76 self.delfile(fname) |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
77 self._popped.add(fname) |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
78 |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
79 def files(self): |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
80 return list(self._files) + list(self._data) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
81 |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
82 def close(self): |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
83 if self._tempdir is not None: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
84 tempdir, self._tempdir = self._tempdir, None |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
85 shutil.rmtree(tempdir) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
86 self._files = None |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
87 self._data = None |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
88 |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
89 class RevisionData(object): |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
90 |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
91 __slots__ = [ |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
92 'file', 'added', 'deleted', 'rev', 'execfiles', 'symlinks', |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
93 'copies', 'missing', 'emptybranches', 'base', 'externals', 'ui', |
949
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
94 'exception', 'store', '_failonmissing', |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
95 ] |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
96 |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
97 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
|
98 self.ui = ui |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
99 self.clear() |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
100 |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
101 def clear(self): |
944
d6db289f1548
pull: add hgsubversion.filestoresize to control memory consumption
Patrick Mezard <patrick@mezard.eu>
parents:
943
diff
changeset
|
102 self.store = FileStore(util.getfilestoresize(self.ui)) |
901
bd12a4da0f35
replay: workaround svn not telling us about x/l flags (issue346)
Bryan O'Sullivan <bryano@fb.com>
parents:
891
diff
changeset
|
103 self.added = set() |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
104 self.deleted = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
105 self.rev = None |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
106 self.execfiles = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
107 self.symlinks = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
108 # 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
|
109 self.copies = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
110 self.missing = set() |
949
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
111 # Used in tests and debugging |
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
112 self._failonmissing = self.ui.config( |
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
113 'hgsubversion', 'failonmissing', False) |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
114 self.emptybranches = {} |
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
115 self.externals = {} |
434
3e2259fe3c93
editor: move exception data into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
433
diff
changeset
|
116 self.exception = None |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
117 |
942
4d9e80f6ba43
editor: do not touch RevisionData copies from the editor
Patrick Mezard <patrick@mezard.eu>
parents:
941
diff
changeset
|
118 def set(self, path, data, isexec=False, islink=False, copypath=None): |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
119 self.store.setfile(path, data) |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
120 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
|
121 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
|
122 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
|
123 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
|
124 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
|
125 self.missing.remove(path) |
942
4d9e80f6ba43
editor: do not touch RevisionData copies from the editor
Patrick Mezard <patrick@mezard.eu>
parents:
941
diff
changeset
|
126 if copypath is not None: |
4d9e80f6ba43
editor: do not touch RevisionData copies from the editor
Patrick Mezard <patrick@mezard.eu>
parents:
941
diff
changeset
|
127 self.copies[path] = copypath |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
128 |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
129 def get(self, path): |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
130 if path in self.deleted: |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
131 raise IOError(errno.ENOENT, '%s is deleted' % path) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
132 data = self.store.getfile(path) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
133 isexec = self.execfiles.get(path) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
134 islink = self.symlinks.get(path) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
135 copied = self.copies.get(path) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
136 return data, isexec, islink, copied |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
137 |
945
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
138 def pop(self, path): |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
139 ret = self.get(path) |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
140 self.store.popfile(path) |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
141 return ret |
bfbfc9be3faa
editor: add a pop() method to RevisionMeta to reduce resource usage
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
142 |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
143 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
|
144 self.deleted[path] = True |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
145 self.store.delfile(path) |
433
a2a15fa7afb1
editor: move set_file() and delete_file() methods to RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
146 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
|
147 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
|
148 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
|
149 |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
150 def files(self): |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
151 """Return a sorted list of changed files.""" |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
152 files = set(self.store.files()) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
153 for g in (self.symlinks, self.execfiles, self.deleted): |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
154 files.update(g) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
155 return sorted(files) |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
156 |
949
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
157 def addmissing(self, path): |
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
158 if self._failonmissing: |
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
159 raise EditingError('missing entry: %s' % path) |
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
160 self.missing.add(path) |
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
161 |
436
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
162 def findmissing(self, svn): |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
163 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
164 if not self.missing: |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
165 return |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
166 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
167 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
|
168 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
|
169 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
|
170 r = self.rev.revnum |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
171 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
172 files = set() |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
173 for p in self.missing: |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
174 self.ui.note('.') |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
175 self.ui.flush() |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
176 if p[-1] == '/': |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
177 dir = p[len(root):] |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
498
diff
changeset
|
178 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
|
179 files.update(new) |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
180 else: |
591
4359ddd73b00
strip off root file name only once for missing files
Gerhard Weis <gweis@gmx.at>
parents:
587
diff
changeset
|
181 files.add(p) |
436
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
182 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
183 i = 1 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
184 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
|
185 for p in files: |
957
397af94ce98c
editor: improve debug information when fetching files in replay
Patrick Mezard <patrick@mezard.eu>
parents:
952
diff
changeset
|
186 if self.ui.debugflag: |
397af94ce98c
editor: improve debug information when fetching files in replay
Patrick Mezard <patrick@mezard.eu>
parents:
952
diff
changeset
|
187 self.ui.debug('fetching %s\n' % p) |
397af94ce98c
editor: improve debug information when fetching files in replay
Patrick Mezard <patrick@mezard.eu>
parents:
952
diff
changeset
|
188 else: |
397af94ce98c
editor: improve debug information when fetching files in replay
Patrick Mezard <patrick@mezard.eu>
parents:
952
diff
changeset
|
189 self.ui.note('.') |
436
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
190 self.ui.flush() |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
191 if i % 50 == 0: |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
192 svn.init_ra_and_client() |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
193 i += 1 |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
498
diff
changeset
|
194 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
|
195 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
|
196 |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
197 self.missing = set() |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
198 self.ui.note('\n') |
404162e4bb53
editor: move find missing files routine into RevisionData class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
199 |
943
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
200 def close(self): |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
201 self.store.close() |
c49c3c418f9d
editor: move RevisionData on the filesystem over a given threshold
Patrick Mezard <patrick@mezard.eu>
parents:
942
diff
changeset
|
202 |
940
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
203 class CopiedFile(object): |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
204 def __init__(self, node, path, copypath): |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
205 self.node = node |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
206 self.path = path |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
207 self.copypath = copypath |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
208 |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
209 def resolve(self, getctxfn, ctx=None): |
940
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
210 if ctx is None: |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
211 ctx = getctxfn(self.node) |
940
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
212 fctx = ctx[self.path] |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
213 data = fctx.data() |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
214 flags = fctx.flags() |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
215 islink = 'l' in flags |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
216 if islink: |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
217 data = 'link ' + data |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
218 return data, 'x' in flags, islink, self.copypath |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
219 |
601
0fe490ce2fbb
isolate all imports of Subversion modules in svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
591
diff
changeset
|
220 class HgEditor(svnwrap.Editor): |
33
a9c15cae50e5
Faster append-only revmap implementation.
Andreas Hartmetz <ahartmetz@gmail.com>
parents:
23
diff
changeset
|
221 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
222 def __init__(self, meta): |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
223 self.meta = meta |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
224 self.ui = meta.ui |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
225 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
|
226 self.current = RevisionData(meta.ui) |
937
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
227 self._clear() |
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
228 |
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
229 def _clear(self): |
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
230 self._filecounter = 0 |
940
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
231 # A mapping of svn paths to CopiedFile entries |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
232 self._svncopies = {} |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
233 # A mapping of batons to (path, data, isexec, islink, copypath) tuples |
948
e2090fabc1a9
editor: use SimpleStringIO in apply_text()
Patrick Mezard <patrick@mezard.eu>
parents:
947
diff
changeset
|
234 # data is a SimpleStringIO if the file was edited, a string |
e2090fabc1a9
editor: use SimpleStringIO in apply_text()
Patrick Mezard <patrick@mezard.eu>
parents:
947
diff
changeset
|
235 # otherwise. |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
236 self._openfiles = {} |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
237 # A mapping of file paths to batons |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
238 self._openpaths = {} |
941
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
239 self._deleted = set() |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
240 self._getctx = util.lrucachefunc(self.repo.changectx, 3) |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
241 # A stack of opened directory (baton, path) pairs. |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
242 self._opendirs = [] |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
243 |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
244 def _openfile(self, path, data, isexec, islink, copypath, create=False): |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
245 if path in self._openpaths: |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
246 raise EditingError('trying to open an already opened file %s' |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
247 % path) |
941
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
248 if not create and path in self._deleted: |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
249 raise EditingError('trying to open a deleted file %s' % path) |
941
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
250 if path in self._deleted: |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
251 self._deleted.remove(path) |
937
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
252 self._filecounter += 1 |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
253 baton = 'f%d-%s' % (self._filecounter, path) |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
254 self._openfiles[baton] = (path, data, isexec, islink, copypath) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
255 self._openpaths[path] = baton |
937
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
256 return baton |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
257 |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
258 def _opendir(self, path): |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
259 self._filecounter += 1 |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
260 baton = 'f%d-%s' % (self._filecounter, path) |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
261 self._opendirs.append((baton, path)) |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
262 return baton |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
263 |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
264 def _checkparentdir(self, baton): |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
265 if not self._opendirs: |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
266 raise EditingError('trying to operate on an already closed ' |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
267 'directory: %s' % baton) |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
268 if self._opendirs[-1][0] != baton: |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
269 raise EditingError('can only operate on the most recently ' |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
270 'opened directory: %s != %s' % (self._opendirs[-1][0], baton)) |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
271 |
941
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
272 def _deletefile(self, path): |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
273 self._deleted.add(path) |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
274 if path in self._svncopies: |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
275 del self._svncopies[path] |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
276 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
277 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
278 def delete_entry(self, path, revision_bogus, parent_baton, pool=None): |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
279 self._checkparentdir(parent_baton) |
545
ebd8fb1a05e4
clean up trailing whitespace
Augie Fackler <durin42@gmail.com>
parents:
540
diff
changeset
|
280 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
|
281 if br_path == '': |
540
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
282 if self.meta.get_path_tag(path): |
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
283 # 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
|
284 return |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
285 self.meta.closebranches.add(branch) |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
286 |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
287 # Delete copied entries, no need to check they exist in hg |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
288 # parent revision. |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
289 if path in self._svncopies: |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
290 del self._svncopies[path] |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
291 prefix = path + '/' |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
292 for f in list(self._svncopies): |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
293 if f.startswith(prefix): |
941
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
294 self._deletefile(f) |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
295 |
116
30580c05dccc
hg_delta_editor: merge _is_path_valid() and _path_and_branch_from_path()
Patrick Mezard <pmezard@gmail.com>
parents:
111
diff
changeset
|
296 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
|
297 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
|
298 if ha == revlog.nullid: |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
299 return |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
300 ctx = self._getctx(ha) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
301 if br_path not in ctx: |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
302 br_path2 = '' |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
303 if br_path != '': |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
304 br_path2 = br_path + '/' |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
305 # 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
|
306 self.current.externals[path] = None |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
307 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
|
308 f_p = '%s/%s' % (path, f[len(br_path2):]) |
941
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
309 self._deletefile(f_p) |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
310 self._deletefile(path) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
311 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
312 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
313 def open_file(self, path, parent_baton, base_revision, p=None): |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
314 self._checkparentdir(parent_baton) |
960
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
315 if not self.meta.is_path_valid(path): |
937
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
316 return None |
960
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
317 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
|
318 |
937
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
319 self.ui.note('M %s\n' % path) |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
320 |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
321 if path in self._svncopies: |
940
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
322 copy = self._svncopies.pop(path) |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
323 base, isexec, islink, copypath = copy.resolve(self._getctx) |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
324 return self._openfile(path, base, isexec, islink, copypath) |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
325 |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
326 baserev = base_revision |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
327 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
|
328 baserev = self.current.rev.revnum - 1 |
586
704d2ce1d906
editor: fix open_file() on replaced branch
Patrick Mezard <pmezard@gmail.com>
parents:
585
diff
changeset
|
329 # 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
|
330 # 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
|
331 # agains replaced branch. |
704d2ce1d906
editor: fix open_file() on replaced branch
Patrick Mezard <pmezard@gmail.com>
parents:
585
diff
changeset
|
332 parent = self.meta.get_parent_revision(baserev + 1, branch, True) |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
333 ctx = self._getctx(parent) |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
334 if fpath not in ctx: |
949
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
335 self.current.addmissing(path) |
937
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
336 return None |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
337 |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
338 fctx = ctx.filectx(fpath) |
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
339 base = fctx.data() |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
340 flags = fctx.flags() |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
341 if 'l' in flags: |
378
eeefbe104087
Inline HgChangeReceiver.load_base_from_ctx().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
342 base = 'link ' + base |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
343 return self._openfile(path, base, 'x' in flags, 'l' in flags, None) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
344 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
345 @svnwrap.ieditor |
300
4aba7542f6a9
Various cleanups, cosmetics and removal of superfluous assertions.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
299
diff
changeset
|
346 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
|
347 copyfrom_revision=None, file_pool=None): |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
348 self._checkparentdir(parent_baton) |
960
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
349 # Use existing=False because we use the fact a file is being |
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
350 # added here to populate the branchmap which is used with |
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
351 # existing=True. |
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
352 fpath, branch = self.meta.split_branch_path(path, existing=False)[:2] |
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
353 if not fpath or fpath not in self.meta.filemap: |
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
354 return None |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
355 if path in self._svncopies: |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
356 raise EditingError('trying to replace copied file %s' % path) |
941
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
357 if path in self._deleted: |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
358 self._deleted.remove(path) |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
436
diff
changeset
|
359 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
|
360 not self.meta.get_path_tag(self.meta.remotename(branch))): |
960
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
361 # we know this branch will exist now, because it has at |
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
362 # least one file. Rock. |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
363 self.meta.branches[branch] = None, 0, self.current.rev.revnum |
67
e319c9168910
hg_delta_editor: register svn file copies
Patrick Mezard <pmezard@gmail.com>
parents:
59
diff
changeset
|
364 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
|
365 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
|
366 self.current.added.add(path) |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
367 return self._openfile(path, '', False, False, None, create=True) |
186
6266ba36ee15
Create patch to make normal output much less verbose…
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
181
diff
changeset
|
368 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
|
369 (from_file, |
420
59e19c73b0df
svnmeta: eliminate unneeded path_and_branch_for_path() method
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
418
diff
changeset
|
370 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
|
371 if not from_file: |
949
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
372 self.current.addmissing(path) |
937
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
373 return None |
585
c3ba4ca81d16
editor: fix replaced files content in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
582
diff
changeset
|
374 # 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
|
375 # 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
|
376 # agains replaced branch. |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
377 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
|
378 from_branch, True) |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
379 ctx = self._getctx(ha) |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
380 if from_file not in ctx: |
949
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
381 self.current.addmissing(path) |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
382 return None |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
383 |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
384 fctx = ctx.filectx(from_file) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
385 flags = fctx.flags() |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
386 self.current.set(path, fctx.data(), 'x' in flags, 'l' in flags) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
387 copypath = None |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
388 if from_branch == branch: |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
389 parentid = self.meta.get_parent_revision( |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
390 self.current.rev.revnum, branch) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
391 if parentid != revlog.nullid: |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
392 parentctx = self._getctx(parentid) |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
393 if util.issamefile(parentctx, ctx, from_file): |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
394 copypath = from_file |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
395 return self._openfile(path, fctx.data(), 'x' in flags, 'l' in flags, |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
396 copypath, create=True) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
397 |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
398 @svnwrap.ieditor |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
399 def close_file(self, file_baton, checksum, pool=None): |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
400 if file_baton is None: |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
401 return |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
402 if file_baton not in self._openfiles: |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
403 raise EditingError('trying to close a non-open file %s' |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
404 % file_baton) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
405 path, data, isexec, islink, copypath = self._openfiles.pop(file_baton) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
406 del self._openpaths[path] |
948
e2090fabc1a9
editor: use SimpleStringIO in apply_text()
Patrick Mezard <patrick@mezard.eu>
parents:
947
diff
changeset
|
407 if not isinstance(data, basestring): |
e2090fabc1a9
editor: use SimpleStringIO in apply_text()
Patrick Mezard <patrick@mezard.eu>
parents:
947
diff
changeset
|
408 # Files can be opened, properties changed and apply_text |
e2090fabc1a9
editor: use SimpleStringIO in apply_text()
Patrick Mezard <patrick@mezard.eu>
parents:
947
diff
changeset
|
409 # never called, in which case data is still a string. |
e2090fabc1a9
editor: use SimpleStringIO in apply_text()
Patrick Mezard <patrick@mezard.eu>
parents:
947
diff
changeset
|
410 data = data.getvalue() |
942
4d9e80f6ba43
editor: do not touch RevisionData copies from the editor
Patrick Mezard <patrick@mezard.eu>
parents:
941
diff
changeset
|
411 self.current.set(path, data, isexec, islink, copypath) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
412 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
413 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
414 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
|
415 copyfrom_revision, dir_pool=None): |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
416 self._checkparentdir(parent_baton) |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
417 baton = self._opendir(path) |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
418 |
420
59e19c73b0df
svnmeta: eliminate unneeded path_and_branch_for_path() method
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
418
diff
changeset
|
419 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
|
420 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
|
421 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
|
422 self.current.emptybranches[branch] = True |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
423 else: |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
424 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
|
425 if br_path is None or not copyfrom_path: |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
426 return baton |
521
839734dfb5c7
Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
518
diff
changeset
|
427 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
|
428 del self.current.emptybranches[branch] |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
429 return baton |
518
e37738d95b27
editor: remove useless test
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
430 tag = self.meta.get_path_tag(copyfrom_path) |
e37738d95b27
editor: remove useless test
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
431 if tag not in self.meta.tags: |
e37738d95b27
editor: remove useless test
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
432 tag = None |
950
a80b01ceb1fc
editor: relax copyfrom dir checks to avoid extra missing entries
Patrick Mezard <patrick@mezard.eu>
parents:
949
diff
changeset
|
433 if not self.meta.is_path_valid(copyfrom_path, existing=False): |
a80b01ceb1fc
editor: relax copyfrom dir checks to avoid extra missing entries
Patrick Mezard <patrick@mezard.eu>
parents:
949
diff
changeset
|
434 # The source path only exists at copyfrom_revision, use |
a80b01ceb1fc
editor: relax copyfrom dir checks to avoid extra missing entries
Patrick Mezard <patrick@mezard.eu>
parents:
949
diff
changeset
|
435 # existing=False to guess a possible branch location and |
a80b01ceb1fc
editor: relax copyfrom dir checks to avoid extra missing entries
Patrick Mezard <patrick@mezard.eu>
parents:
949
diff
changeset
|
436 # test it against the filemap. The actual path and |
a80b01ceb1fc
editor: relax copyfrom dir checks to avoid extra missing entries
Patrick Mezard <patrick@mezard.eu>
parents:
949
diff
changeset
|
437 # revision will be resolved below if necessary. |
949
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
438 self.current.addmissing('%s/' % path) |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
439 return baton |
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
|
440 if tag: |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
441 changeid = self.meta.tags[tag] |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
442 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
|
443 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
|
444 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
|
445 source_rev = copyfrom_revision |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
446 frompath, source_branch = self.meta.split_branch_path(copyfrom_path)[:2] |
587
c06f59441f8e
editor: fix replaced directory copies
Patrick Mezard <pmezard@gmail.com>
parents:
586
diff
changeset
|
447 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
|
448 if new_hash == node.nullid: |
949
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
449 self.current.addmissing('%s/' % path) |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
450 return baton |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
451 fromctx = self._getctx(new_hash) |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
452 if frompath != '/' and frompath != '': |
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
453 frompath = '%s/' % frompath |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
454 else: |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
455 frompath = '' |
947
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
456 |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
457 copyfromparent = False |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
458 if frompath == '' and br_path == '': |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
459 pnode = self.meta.get_parent_revision( |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
460 self.current.rev.revnum, branch) |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
461 if pnode == new_hash: |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
462 # Data parent is topological parent and relative paths |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
463 # are the same, not need to do anything but restore |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
464 # files marked as deleted. |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
465 copyfromparent = True |
952
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
466 # Get the parent which would have been used for this branch |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
467 # without the replace action. |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
468 oldpnode = self.meta.get_parent_revision( |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
469 self.current.rev.revnum, branch, exact=True) |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
470 if (oldpnode != revlog.nullid |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
471 and util.isancestor(self._getctx(oldpnode), fromctx)): |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
472 # Branch-wide replacement, unmark the branch as deleted |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
473 self.meta.closebranches.discard(branch) |
947
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
474 |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
475 svncopies = {} |
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
|
476 copies = {} |
790
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
477 for f in fromctx: |
3173f418079c
editor: rename add_directory() cp_f* variable into from*
Patrick Mezard <pmezard@gmail.com>
parents:
741
diff
changeset
|
478 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
|
479 continue |
791
05ee7d5351de
editor: simplify add_directory() a bit more
Patrick Mezard <pmezard@gmail.com>
parents:
790
diff
changeset
|
480 dest = path + '/' + f[len(frompath):] |
960
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
481 if not self.meta.is_path_valid(dest): |
502613f6b583
editor: ignore added or copied files excluded by a filemap
Patrick Mezard <patrick@mezard.eu>
parents:
958
diff
changeset
|
482 continue |
941
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
483 if dest in self._deleted: |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
484 self._deleted.remove(dest) |
947
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
485 if copyfromparent: |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
486 continue |
e1cb98792cf4
editor: do not reread all data upon branching
Patrick Mezard <patrick@mezard.eu>
parents:
945
diff
changeset
|
487 svncopies[dest] = CopiedFile(new_hash, f, None) |
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
|
488 if branch == source_branch: |
791
05ee7d5351de
editor: simplify add_directory() a bit more
Patrick Mezard <pmezard@gmail.com>
parents:
790
diff
changeset
|
489 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
|
490 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
|
491 # 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
|
492 # the source and destination revisions, or discard it completely. |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
493 parentid = self.meta.get_parent_revision( |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
494 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
|
495 if parentid != revlog.nullid: |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
496 parentctx = self._getctx(parentid) |
496
5e0dfe59d4c3
copies: fix under-reporting of copies in hg
Augie Fackler <durin42@gmail.com>
parents:
448
diff
changeset
|
497 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
|
498 if util.issamefile(parentctx, fromctx, v): |
940
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
499 svncopies[k].copypath = v |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
500 self._svncopies.update(svncopies) |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
501 |
792
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
502 # Copy the externals definitions of copied directories |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
503 fromext = svnexternals.parse(self.ui, fromctx) |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
504 for p, v in fromext.iteritems(): |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
505 pp = p and (p + '/') or '' |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
506 if pp.startswith(frompath): |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
507 dest = (path + '/' + pp[len(frompath):]).rstrip('/') |
ba65c0b01d4f
replay: copy copied directories externals
Patrick Mezard <pmezard@gmail.com>
parents:
791
diff
changeset
|
508 self.current.externals[dest] = v |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
509 return baton |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
510 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
511 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
512 def change_file_prop(self, file_baton, name, value, pool=None): |
937
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
513 if file_baton is None: |
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
514 return |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
515 path, data, isexec, islink, copypath = self._openfiles[file_baton] |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
516 changed = False |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
517 if name == 'svn:executable': |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
518 changed = True |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
519 isexec = bool(value is not None) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
520 elif name == 'svn:special': |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
521 changed = True |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
522 islink = bool(value is not None) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
523 if changed: |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
524 self._openfiles[file_baton] = (path, data, isexec, islink, copypath) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
525 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
526 @svnwrap.ieditor |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
527 def change_dir_prop(self, dir_baton, name, value, pool=None): |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
528 self._checkparentdir(dir_baton) |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
529 if len(self._opendirs) == 1: |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
530 return |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
531 path = self._opendirs[-1][1] |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
532 if name == 'svn:externals': |
411
d71972428fce
editor: move current revision state into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
533 self.current.externals[path] = value |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
534 |
935
1de83496df4e
subvertpy_wrapper: fix files and directories batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
934
diff
changeset
|
535 @svnwrap.ieditor |
1de83496df4e
subvertpy_wrapper: fix files and directories batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
934
diff
changeset
|
536 def open_root(self, edit_baton, base_revision, dir_pool=None): |
937
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
537 # We should not have to reset these, unfortunately the editor is |
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
538 # reused for different revisions. |
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
539 self._clear() |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
540 return self._opendir('') |
935
1de83496df4e
subvertpy_wrapper: fix files and directories batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
934
diff
changeset
|
541 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
542 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
543 def open_directory(self, path, parent_baton, base_revision, dir_pool=None): |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
544 self._checkparentdir(parent_baton) |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
545 baton = self._opendir(path) |
420
59e19c73b0df
svnmeta: eliminate unneeded path_and_branch_for_path() method
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
418
diff
changeset
|
546 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
|
547 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
|
548 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
|
549 self.current.emptybranches[branch] = False |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
550 return baton |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
551 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
552 @svnwrap.ieditor |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
553 def close_directory(self, dir_baton, dir_pool=None): |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
554 self._checkparentdir(dir_baton) |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
555 self._opendirs.pop() |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
556 |
673
32089d080ff8
editor: move ieditor decorator into svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
633
diff
changeset
|
557 @svnwrap.ieditor |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
558 def apply_textdelta(self, file_baton, base_checksum, pool=None): |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
559 if file_baton is None: |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
560 return lambda x: None |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
561 if file_baton not in self._openfiles: |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
562 raise EditingError('trying to patch a closed file %s' % file_baton) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
563 path, base, isexec, islink, copypath = self._openfiles[file_baton] |
948
e2090fabc1a9
editor: use SimpleStringIO in apply_text()
Patrick Mezard <patrick@mezard.eu>
parents:
947
diff
changeset
|
564 if not isinstance(base, basestring): |
e2090fabc1a9
editor: use SimpleStringIO in apply_text()
Patrick Mezard <patrick@mezard.eu>
parents:
947
diff
changeset
|
565 raise EditingError('trying to edit a file again: %s' % path) |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
566 if not self.meta.is_path_valid(path): |
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
|
567 return lambda x: None |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
568 |
948
e2090fabc1a9
editor: use SimpleStringIO in apply_text()
Patrick Mezard <patrick@mezard.eu>
parents:
947
diff
changeset
|
569 target = svnwrap.SimpleStringIO(closing=False) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
570 self.stream = target |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
571 |
601
0fe490ce2fbb
isolate all imports of Subversion modules in svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
591
diff
changeset
|
572 handler = svnwrap.apply_txdelta(base, target) |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
832
diff
changeset
|
573 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
|
574 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
|
575 'cannot call handler!') |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
576 def txdelt_window(window): |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
577 try: |
937
fb6f6b7fa5a5
editor: implement file batons
Patrick Mezard <patrick@mezard.eu>
parents:
935
diff
changeset
|
578 if not self.meta.is_path_valid(path): |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
579 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
|
580 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
|
581 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
|
582 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
|
583 # 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
|
584 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
|
585 |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
586 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
|
587 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
|
588 |
dfb3afa6c619
stupid: Fail over to full revision when a PatchError is thrown (issue294)
Tim Delaney <timothy.c.delaney@gmail.com>
parents:
901
diff
changeset
|
589 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
|
590 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
|
591 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
|
592 |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
593 # window being None means commit this file |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
594 if not window: |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
595 self._openfiles[file_baton] = ( |
948
e2090fabc1a9
editor: use SimpleStringIO in apply_text()
Patrick Mezard <patrick@mezard.eu>
parents:
947
diff
changeset
|
596 path, target, isexec, islink, copypath) |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
832
diff
changeset
|
597 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
|
598 if e.args[1] == svnwrap.ERR_INCOMPLETE_DATA: |
949
297e2b4a6e2c
editor: add addmissing() and test config to make it fail
Patrick Mezard <patrick@mezard.eu>
parents:
948
diff
changeset
|
599 self.current.addmissing(path) |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
832
diff
changeset
|
600 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
|
601 raise hgutil.Abort(*e.args) |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
832
diff
changeset
|
602 except: # pragma: no cover |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
603 self._exception_info = sys.exc_info() |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
604 raise |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
605 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
|
606 |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
607 def close(self): |
939
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
608 if self._openfiles: |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
609 for e in self._openfiles.itervalues(): |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
610 self.ui.debug('error: %s was not closed\n' % e[0]) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
611 raise EditingError('%d edited files were not closed' |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
612 % len(self._openfiles)) |
997de286ba0c
editor: add close_file(), enforce file batons semantics
Patrick Mezard <patrick@mezard.eu>
parents:
938
diff
changeset
|
613 |
958
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
614 if self._opendirs: |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
615 raise EditingError('directory %s was not closed' |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
616 % self._opendirs[-1][1]) |
506dcb241cef
editor: tidy up directory batons handling
Patrick Mezard <patrick@mezard.eu>
parents:
957
diff
changeset
|
617 |
940
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
618 # Resolve by changelog entries to avoid extra reads |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
619 nodes = {} |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
620 for path, copy in self._svncopies.iteritems(): |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
621 nodes.setdefault(copy.node, []).append((path, copy)) |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
622 for node, copies in nodes.iteritems(): |
34a1217b8218
editor: resolve files copied by directory copy on-demand
Patrick Mezard <patrick@mezard.eu>
parents:
939
diff
changeset
|
623 for path, copy in copies: |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
624 data, isexec, islink, copied = copy.resolve(self._getctx) |
942
4d9e80f6ba43
editor: do not touch RevisionData copies from the editor
Patrick Mezard <patrick@mezard.eu>
parents:
941
diff
changeset
|
625 self.current.set(path, data, isexec, islink, copied) |
938
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
626 self._svncopies.clear() |
f9014e28721b
editor: start separating svn copies from open files
Patrick Mezard <patrick@mezard.eu>
parents:
937
diff
changeset
|
627 |
941
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
628 for f in self._deleted: |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
629 self.current.delete(f) |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
630 self._deleted.clear() |
febca88dd261
editor: handle deleted files in editor
Patrick Mezard <patrick@mezard.eu>
parents:
940
diff
changeset
|
631 |
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
|
632 _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
|
633 "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
|
634 " 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
|
635 "\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
|
636 " 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
|
637 "\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
|
638 " 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
|
639 "\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
|
640 ) |