Mercurial > hgsubversion
annotate hgsubversion/stupid.py @ 532:b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Sat, 30 Jan 2010 09:43:30 +0100 |
parents | cf4fe45bf8fd |
children | 715d2e3e153b |
rev | line source |
---|---|
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
1 import cStringIO |
531
cf4fe45bf8fd
Change all instantiations of IOError to set both errno and strerror.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
529
diff
changeset
|
2 import errno |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
3 import re |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
4 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
5 from mercurial import patch |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
6 from mercurial import node |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
7 from mercurial import context |
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 svn import core |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
10 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
11 import svnwrap |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
12 import svnexternals |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
13 import util |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
14 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
15 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
16 binary_file_re = re.compile(r'''Index: ([^\n]*) |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
17 =* |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
18 Cannot display: file marked as a binary type.''') |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
19 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
20 property_exec_set_re = re.compile(r'''Property changes on: ([^\n]*) |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
21 _* |
25
99f8e4b535e9
svn 1.4 and 1.5 have different ideas of diff output for prop changes.
Augie Fackler <durin42@gmail.com>
parents:
11
diff
changeset
|
22 (?:Added|Name): svn:executable |
111
5497d1264b4d
fetch_command: Fix mis-converted executable when svn:executable was set to the
Augie Fackler <durin42@gmail.com>
parents:
110
diff
changeset
|
23 \+''') |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
24 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
25 property_exec_removed_re = re.compile(r'''Property changes on: ([^\n]*) |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
26 _* |
25
99f8e4b535e9
svn 1.4 and 1.5 have different ideas of diff output for prop changes.
Augie Fackler <durin42@gmail.com>
parents:
11
diff
changeset
|
27 (?:Deleted|Name): svn:executable |
111
5497d1264b4d
fetch_command: Fix mis-converted executable when svn:executable was set to the
Augie Fackler <durin42@gmail.com>
parents:
110
diff
changeset
|
28 -''') |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
29 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
30 empty_file_patch_wont_make_re = re.compile(r'''Index: ([^\n]*)\n=*\n(?=Index:)''') |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
31 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
32 any_file_re = re.compile(r'''^Index: ([^\n]*)\n=*\n''', re.MULTILINE) |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
33 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
34 property_special_set_re = re.compile(r'''Property changes on: ([^\n]*) |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
35 _* |
25
99f8e4b535e9
svn 1.4 and 1.5 have different ideas of diff output for prop changes.
Augie Fackler <durin42@gmail.com>
parents:
11
diff
changeset
|
36 (?:Added|Name): svn:special |
111
5497d1264b4d
fetch_command: Fix mis-converted executable when svn:executable was set to the
Augie Fackler <durin42@gmail.com>
parents:
110
diff
changeset
|
37 \+''') |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
38 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
39 property_special_removed_re = re.compile(r'''Property changes on: ([^\n]*) |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
40 _* |
25
99f8e4b535e9
svn 1.4 and 1.5 have different ideas of diff output for prop changes.
Augie Fackler <durin42@gmail.com>
parents:
11
diff
changeset
|
41 (?:Deleted|Name): svn:special |
111
5497d1264b4d
fetch_command: Fix mis-converted executable when svn:executable was set to the
Augie Fackler <durin42@gmail.com>
parents:
110
diff
changeset
|
42 \-''') |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
43 |
239
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
44 |
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
45 class BadPatchApply(Exception): |
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
46 pass |
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
47 |
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
48 |
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
49 def print_your_svn_is_old_message(ui): #pragma: no cover |
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
50 ui.status("In light of that, I'll fall back and do diffs, but it won't do " |
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
51 "as good a job. You should really upgrade your server.\n") |
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
52 |
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
53 |
127
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
54 def mempatchproxy(parentctx, files): |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
55 # Avoid circular references patch.patchfile -> mempatch |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
56 patchfile = patch.patchfile |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
57 |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
58 class mempatch(patchfile): |
424
3ae8edc3d8f1
stupid: handle the new eol option in hg-crew.
Augie Fackler <durin42@gmail.com>
parents:
422
diff
changeset
|
59 def __init__(self, ui, fname, opener, missing=False, eol=None): |
3ae8edc3d8f1
stupid: handle the new eol option in hg-crew.
Augie Fackler <durin42@gmail.com>
parents:
422
diff
changeset
|
60 patchfile.__init__(self, ui, fname, None, False, eol) |
133
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
61 |
127
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
62 def readlines(self, fname): |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
63 if fname not in parentctx: |
531
cf4fe45bf8fd
Change all instantiations of IOError to set both errno and strerror.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
529
diff
changeset
|
64 raise IOError(errno.ENOENT, 'Cannot find %r to patch' % fname) |
129
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
65 fctx = parentctx[fname] |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
66 data = fctx.data() |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
67 if 'l' in fctx.flags(): |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
68 data = 'link ' + data |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
69 return cStringIO.StringIO(data).readlines() |
127
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
70 |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
71 def writelines(self, fname, lines): |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
72 files[fname] = ''.join(lines) |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
73 |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
74 def unlink(self, fname): |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
75 files[fname] = None |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
76 |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
77 return mempatch |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
78 |
200
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
79 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
80 def filteriterhunks(meta): |
200
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
81 iterhunks = patch.iterhunks |
514
a30b9fa840be
stupid: update filteriterhunks() for hg 1.5
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
82 def filterhunks(ui, fp, sourcefile=None): |
200
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
83 applycurrent = False |
424
3ae8edc3d8f1
stupid: handle the new eol option in hg-crew.
Augie Fackler <durin42@gmail.com>
parents:
422
diff
changeset
|
84 # Passing False instead of textmode because we should never |
3ae8edc3d8f1
stupid: handle the new eol option in hg-crew.
Augie Fackler <durin42@gmail.com>
parents:
422
diff
changeset
|
85 # be ignoring EOL type. |
514
a30b9fa840be
stupid: update filteriterhunks() for hg 1.5
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
86 for data in iterhunks(ui, fp, sourcefile): |
200
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
87 if data[0] == 'file': |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
88 if data[1][1] in meta.filemap: |
200
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
89 applycurrent = True |
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
90 else: |
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
91 applycurrent = False |
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
92 assert data[0] != 'git', 'Filtering git hunks not supported.' |
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
93 if applycurrent: |
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
94 yield data |
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
95 return filterhunks |
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
96 |
239
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
97 |
532
b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
531
diff
changeset
|
98 def diff_branchrev(ui, svn, meta, branch, branchpath, r, parentctx): |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
99 """Extract all 'branch' content at a given revision. |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
100 |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
101 Return a tuple (files, filectxfn) where 'files' is the list of all files |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
102 in the branch at the given revision, and 'filectxfn' is a memctx compatible |
109
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
103 callable to retrieve individual file information. Raise BadPatchApply upon |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
104 error. |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
105 """ |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
106 def make_diff_path(branch): |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
107 if meta.layout == 'single': |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
108 return '' |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
109 if branch == 'trunk' or branch is None: |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
110 return 'trunk' |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
111 elif branch.startswith('../'): |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
112 return branch[3:] |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
113 return 'branches/%s' % branch |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
114 parent_rev, br_p = meta.get_parent_svn_branch_and_rev(r.revnum, branch) |
109
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
115 try: |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
116 if br_p == branch: |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
117 # letting patch handle binaries sounded |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
118 # cool, but it breaks patch in sad ways |
532
b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
531
diff
changeset
|
119 d = svn.get_unified_diff(branchpath, r.revnum, deleted=False, |
109
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
120 ignore_type=False) |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
121 else: |
532
b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
531
diff
changeset
|
122 d = svn.get_unified_diff(branchpath, r.revnum, |
109
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
123 other_path=make_diff_path(br_p), |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
124 other_rev=parent_rev, |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
125 deleted=True, ignore_type=True) |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
126 if d: |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
127 raise BadPatchApply('branch creation with mods') |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
128 except svnwrap.SubversionRepoCanNotDiff: |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
129 raise BadPatchApply('subversion diffing code is not supported') |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
130 except core.SubversionException, e: |
224
2165461d2dd8
Exception clean-ups; use symbolic names & avoid Python 2.6 deprecations.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
203
diff
changeset
|
131 if (hasattr(e, 'apr_err') and e.apr_err != core.SVN_ERR_FS_NOT_FOUND): |
109
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
132 raise |
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
133 raise BadPatchApply('previous revision does not exist') |
169
f1919e1c35bf
fetch_command: cancel patching when encountering binary diffs
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
134 if '\0' in d: |
f1919e1c35bf
fetch_command: cancel patching when encountering binary diffs
Patrick Mezard <pmezard@gmail.com>
parents:
168
diff
changeset
|
135 raise BadPatchApply('binary diffs are not supported') |
127
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
136 files_data = {} |
529
68667b627bd5
stupid: replace dicts with sets
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
137 # we have to pull each binary file by hand as a fulltext, |
68667b627bd5
stupid: replace dicts with sets
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
138 # which sucks but we've got no choice |
68667b627bd5
stupid: replace dicts with sets
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
139 binary_files = set(binary_file_re.findall(d)) |
68667b627bd5
stupid: replace dicts with sets
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
140 touched_files = set(binary_files) |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
141 d2 = empty_file_patch_wont_make_re.sub('', d) |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
142 d2 = property_exec_set_re.sub('', d2) |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
143 d2 = property_exec_removed_re.sub('', d2) |
529
68667b627bd5
stupid: replace dicts with sets
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
144 # Here we ensure that all files, including the new empty ones |
68667b627bd5
stupid: replace dicts with sets
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
145 # are marked as touched. Content is loaded on demand. |
68667b627bd5
stupid: replace dicts with sets
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
146 touched_files.update(any_file_re.findall(d)) |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
147 if d2.strip() and len(re.findall('\n[-+]', d2.strip())) > 0: |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
148 try: |
127
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
149 oldpatchfile = patch.patchfile |
200
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
150 olditerhunks = patch.iterhunks |
127
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
151 patch.patchfile = mempatchproxy(parentctx, files_data) |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
152 patch.iterhunks = filteriterhunks(meta) |
127
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
153 try: |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
154 # We can safely ignore the changed list since we are |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
155 # handling non-git patches. Touched files are known |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
156 # by our memory patcher. |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
157 patch_st = patch.applydiff(ui, cStringIO.StringIO(d2), |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
158 {}, strip=0) |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
159 finally: |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
160 patch.patchfile = oldpatchfile |
200
2e8c527f0456
stupid replay: Don't actually try and apply diffs to files we don't have anyway.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
161 patch.iterhunks = olditerhunks |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
162 except patch.PatchError: |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
163 # TODO: this happens if the svn server has the wrong mime |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
164 # type stored and doesn't know a file is binary. It would |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
165 # be better to do one file at a time and only do a |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
166 # full fetch on files that had problems. |
109
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
167 raise BadPatchApply('patching failed') |
127
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
168 for x in files_data.iterkeys(): |
186
6266ba36ee15
Create patch to make normal output much less verbose…
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
185
diff
changeset
|
169 ui.note('M %s\n' % x) |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
170 # if this patch didn't apply right, fall back to exporting the |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
171 # entire rev. |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
172 if patch_st == -1: |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
173 assert False, ('This should only happen on case-insensitive' |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
174 ' volumes.') |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
175 elif patch_st == 1: |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
176 # When converting Django, I saw fuzz on .po files that was |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
177 # causing revisions to end up failing verification. If that |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
178 # can be fixed, maybe this won't ever be reached. |
109
460443a96497
fetch_command: only raise BadPatchApply() from stupid_diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
108
diff
changeset
|
179 raise BadPatchApply('patching succeeded with fuzz') |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
180 else: |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
181 ui.status('Not using patch for %s, diff had no hunks.\n' % |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
182 r.revnum) |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
183 |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
184 exec_files = {} |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
185 for m in property_exec_removed_re.findall(d): |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
186 exec_files[m] = False |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
187 for m in property_exec_set_re.findall(d): |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
188 exec_files[m] = True |
529
68667b627bd5
stupid: replace dicts with sets
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
189 touched_files.update(exec_files) |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
190 link_files = {} |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
191 for m in property_special_set_re.findall(d): |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
192 # TODO(augie) when a symlink is removed, patching will fail. |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
193 # We're seeing that above - there's gotta be a better |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
194 # workaround than just bailing like that. |
127
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
195 assert m in files_data |
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
196 link_files[m] = True |
129
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
197 for m in property_special_removed_re.findall(d): |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
198 assert m in files_data |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
199 link_files[m] = False |
127
7e45bcf52b64
fetch_command: patch files in memory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
119
diff
changeset
|
200 |
528
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
201 unknown_files = set() |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
202 for p in r.paths: |
528
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
203 action = r.paths[p].action |
532
b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
531
diff
changeset
|
204 if not p.startswith(branchpath) or action not in 'DR': |
528
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
205 continue |
532
b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
531
diff
changeset
|
206 if branchpath: |
b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
531
diff
changeset
|
207 p2 = p[len(branchpath)+1:].strip('/') |
528
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
208 else: |
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
209 p2 = p |
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
210 if p2 in parentctx: |
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
211 toucheds = [p2] |
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
212 else: |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
213 # If this isn't in the parent ctx, it must've been a dir |
528
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
214 toucheds = [f for f in parentctx if f.startswith(p2 + '/')] |
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
215 if action == 'R': |
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
216 # Files were replaced, we don't know if they still exist |
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
217 unknown_files.update(toucheds) |
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
218 else: |
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
219 files_data.update((f, None) for f in toucheds) |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
220 |
529
68667b627bd5
stupid: replace dicts with sets
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
221 touched_files.update(files_data) |
68667b627bd5
stupid: replace dicts with sets
Patrick Mezard <pmezard@gmail.com>
parents:
528
diff
changeset
|
222 touched_files.update(unknown_files) |
129
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
223 |
532
b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
531
diff
changeset
|
224 copies = getcopies(svn, meta, branch, branchpath, r, touched_files, |
110
a4dcffaa6538
fetch_command: pass parent changectx instead of identifier
Patrick Mezard <pmezard@gmail.com>
parents:
109
diff
changeset
|
225 parentctx) |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
226 |
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
227 def filectxfn(repo, memctx, path): |
129
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
228 if path in files_data and files_data[path] is None: |
531
cf4fe45bf8fd
Change all instantiations of IOError to set both errno and strerror.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
529
diff
changeset
|
229 raise IOError(errno.EBADF, 'No data configured for file ' + path) |
129
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
230 |
528
052050ca59d6
replay: disable maybeedit filtering, could discard copy records
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
231 if path in binary_files or path in unknown_files: |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
232 pa = path |
532
b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
531
diff
changeset
|
233 if branchpath: |
b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
531
diff
changeset
|
234 pa = branchpath + '/' + path |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
235 data, mode = svn.get_file(pa, r.revnum) |
128
bab5bcbbb3dc
fetch_command: in stupid mode, load binary files when necessary
Patrick Mezard <pmezard@gmail.com>
parents:
127
diff
changeset
|
236 isexe = 'x' in mode |
bab5bcbbb3dc
fetch_command: in stupid mode, load binary files when necessary
Patrick Mezard <pmezard@gmail.com>
parents:
127
diff
changeset
|
237 islink = 'l' in mode |
129
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
238 else: |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
239 isexe = exec_files.get(path, 'x' in parentctx.flags(path)) |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
240 islink = link_files.get(path, 'l' in parentctx.flags(path)) |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
241 data = '' |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
242 if path in files_data: |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
243 data = files_data[path] |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
244 if islink: |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
245 data = data[len('link '):] |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
246 elif path in parentctx: |
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
247 data = parentctx[path].data() |
133
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
248 |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
249 copied = copies.get(path) |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
250 # TODO this branch feels like it should not be required, |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
251 # and this may actually imply a bug in getcopies |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
252 if copied not in parentctx.manifest(): |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
253 copied = None |
128
bab5bcbbb3dc
fetch_command: in stupid mode, load binary files when necessary
Patrick Mezard <pmezard@gmail.com>
parents:
127
diff
changeset
|
254 return context.memfilectx(path=path, data=data, islink=islink, |
bab5bcbbb3dc
fetch_command: in stupid mode, load binary files when necessary
Patrick Mezard <pmezard@gmail.com>
parents:
127
diff
changeset
|
255 isexec=isexe, copied=copied) |
108
de19a13edfa8
fetch_command: extract diff code in a function
Patrick Mezard <pmezard@gmail.com>
parents:
107
diff
changeset
|
256 |
129
59f8603a6641
fetch_command: in stupid mode, load file content on demand
Patrick Mezard <pmezard@gmail.com>
parents:
128
diff
changeset
|
257 return list(touched_files), filectxfn |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
258 |
73
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
259 def makecopyfinder(r, branchpath, rootdir): |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
260 """Return a function detecting copies. |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
261 |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
262 Returned copyfinder(path) returns None if no copy information can |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
263 be found or ((source, sourcerev), sourcepath) where "sourcepath" is the |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
264 copy source path, "sourcerev" the source svn revision and "source" is the |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
265 copy record path causing the copy to occur. If a single file was copied |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
266 "sourcepath" and "source" are the same, while file copies dectected from |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
267 directory copies return the copied source directory in "source". |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
268 """ |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
269 # filter copy information for current branch |
495
44bde69b6c49
stupid: detect renames with empty branchpath properly
Augie Fackler <durin42@gmail.com>
parents:
494
diff
changeset
|
270 branchpath = (branchpath and branchpath + '/') or '' |
73
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
271 fullbranchpath = rootdir + branchpath |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
272 copies = [] |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
273 for path, e in r.paths.iteritems(): |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
274 if not e.copyfrom_path: |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
275 continue |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
276 if not path.startswith(branchpath): |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
277 continue |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
278 if not e.copyfrom_path.startswith(fullbranchpath): |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
279 # ignore cross branch copies |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
280 continue |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
281 dest = path[len(branchpath):] |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
282 source = e.copyfrom_path[len(fullbranchpath):] |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
283 copies.append((dest, (source, e.copyfrom_rev))) |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
284 |
163 | 285 copies.sort(reverse=True) |
73
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
286 exactcopies = dict(copies) |
101
a3b717e4abf5
Cleanups based on pyflakes output.
Augie Fackler <durin42@gmail.com>
parents:
98
diff
changeset
|
287 |
73
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
288 def finder(path): |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
289 if path in exactcopies: |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
290 return exactcopies[path], exactcopies[path][0] |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
291 # look for parent directory copy, longest first |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
292 for dest, (source, sourcerev) in copies: |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
293 dest = dest + '/' |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
294 if not path.startswith(dest): |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
295 continue |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
296 sourcepath = source + '/' + path[len(dest):] |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
297 return (source, sourcerev), sourcepath |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
298 return None |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
299 |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
300 return finder |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
301 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
302 def getcopies(svn, meta, branch, branchpath, r, files, parentctx): |
73
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
303 """Return a mapping {dest: source} for every file copied into r. |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
304 """ |
110
a4dcffaa6538
fetch_command: pass parent changectx instead of identifier
Patrick Mezard <pmezard@gmail.com>
parents:
109
diff
changeset
|
305 if parentctx.node() == revlog.nullid: |
73
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
306 return {} |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
307 |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
308 # Extract svn copy information, group them by copy source. |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
309 # The idea is to duplicate the replay behaviour where copies are |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
310 # evaluated per copy event (one event for all files in a directory copy, |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
311 # one event for single file copy). We assume that copy events match |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
312 # copy sources in revision info. |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
313 svncopies = {} |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
314 finder = makecopyfinder(r, branchpath, svn.subdir) |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
315 for f in files: |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
316 copy = finder(f) |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
317 if copy: |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
318 svncopies.setdefault(copy[0], []).append((f, copy[1])) |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
319 if not svncopies: |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
320 return {} |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
321 |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
322 # cache changeset contexts and map them to source svn revisions |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
323 ctxs = {} |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
324 def getctx(svnrev): |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
325 if svnrev in ctxs: |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
326 return ctxs[svnrev] |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
327 changeid = meta.get_parent_revision(svnrev + 1, branch) |
73
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
328 ctx = None |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
329 if changeid != revlog.nullid: |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
330 ctx = meta.repo.changectx(changeid) |
73
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
331 ctxs[svnrev] = ctx |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
332 return ctx |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
333 |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
334 # check svn copies really make sense in mercurial |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
335 hgcopies = {} |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
336 for (sourcepath, rev), copies in svncopies.iteritems(): |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
337 sourcectx = getctx(rev) |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
338 if sourcectx is None: |
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
339 continue |
496
5e0dfe59d4c3
copies: fix under-reporting of copies in hg
Augie Fackler <durin42@gmail.com>
parents:
495
diff
changeset
|
340 for k, v in copies: |
497
cad864ed29de
util: make aresamefiles take one file and just be issamefile instead.
Augie Fackler <durin42@gmail.com>
parents:
496
diff
changeset
|
341 if not util.issamefile(sourcectx, parentctx, v): |
496
5e0dfe59d4c3
copies: fix under-reporting of copies in hg
Augie Fackler <durin42@gmail.com>
parents:
495
diff
changeset
|
342 continue |
5e0dfe59d4c3
copies: fix under-reporting of copies in hg
Augie Fackler <durin42@gmail.com>
parents:
495
diff
changeset
|
343 hgcopies.update({k: v}) |
73
9c1b53abefcb
fetch_command: support svn copy detection in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
63
diff
changeset
|
344 return hgcopies |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
345 |
239
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
346 def fetch_externals(svn, branchpath, r, parentctx): |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
347 """Extract svn:externals for the current revision and branch |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
348 |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
349 Return an externalsfile instance or None if there are no externals |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
350 to convert and never were. |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
351 """ |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
352 externals = svnexternals.externalsfile() |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
353 if '.hgsvnexternals' in parentctx: |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
354 externals.read(parentctx['.hgsvnexternals'].data()) |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
355 # Detect property additions only, changes are handled by checking |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
356 # existing entries individually. Projects are unlikely to store |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
357 # externals on many different root directories, so we trade code |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
358 # duplication and complexity for a constant lookup price at every |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
359 # revision in the common case. |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
360 dirs = set(externals) |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
361 if parentctx.node() == revlog.nullid: |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
362 dirs.update([p for p,k in svn.list_files(branchpath, r.revnum) if k == 'd']) |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
363 dirs.add('') |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
364 else: |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
365 branchprefix = (branchpath and branchpath + '/') or branchpath |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
366 for path, e in r.paths.iteritems(): |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
367 if e.action == 'D': |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
368 continue |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
369 if not path.startswith(branchprefix) and path != branchpath: |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
370 continue |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
371 kind = svn.checkpath(path, r.revnum) |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
372 if kind != 'd': |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
373 continue |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
374 path = path[len(branchprefix):] |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
375 dirs.add(path) |
184
d3ea6c98a086
Do not recurse for externals on copied directory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
182
diff
changeset
|
376 if e.action == 'M' or (e.action == 'A' and e.copyfrom_path): |
d3ea6c98a086
Do not recurse for externals on copied directory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
182
diff
changeset
|
377 # Do not recurse in copied directories, changes are marked |
d3ea6c98a086
Do not recurse for externals on copied directory in stupid mode
Patrick Mezard <pmezard@gmail.com>
parents:
182
diff
changeset
|
378 # as 'M', except for the copied one. |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
379 continue |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
380 for child, k in svn.list_files(branchprefix + path, r.revnum): |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
381 if k == 'd': |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
382 dirs.add((path + '/' + child).strip('/')) |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
383 |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
384 # Retrieve new or updated values |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
385 for dir in dirs: |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
386 try: |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
387 dpath = (branchpath and branchpath + '/' + dir) or dir |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
388 values = svn.list_props(dpath, r.revnum) |
174
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
389 externals[dir] = values.get('svn:externals', '') |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
390 except IOError: |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
391 externals[dir] = '' |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
392 |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
393 if not externals and '.hgsvnexternals' not in parentctx: |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
394 # Do not create empty externals files |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
395 return None |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
396 return externals |
f80132c5fea5
Convert svn:externals properties into a .hgsvnexternals file
Patrick Mezard <pmezard@gmail.com>
parents:
169
diff
changeset
|
397 |
239
e2214c8fc91f
Put all stupid stuff in it's own module (separate from fetch-command).
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
237
diff
changeset
|
398 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
399 def fetch_branchrev(svn, meta, branch, branchpath, r, parentctx): |
77
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
400 """Extract all 'branch' content at a given revision. |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
401 |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
402 Return a tuple (files, filectxfn) where 'files' is the list of all files |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
403 in the branch at the given revision, and 'filectxfn' is a memctx compatible |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
404 callable to retrieve individual file information. |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
405 """ |
87
b033d74be76b
fetch_command: in stupid non-diffy mode, take changed paths in account
Patrick Mezard <pmezard@gmail.com>
parents:
79
diff
changeset
|
406 files = [] |
110
a4dcffaa6538
fetch_command: pass parent changectx instead of identifier
Patrick Mezard <pmezard@gmail.com>
parents:
109
diff
changeset
|
407 if parentctx.node() == revlog.nullid: |
88
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
408 # Initial revision, fetch all files |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
409 for path, kind in svn.list_files(branchpath, r.revnum): |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
410 if kind == 'f': |
87
b033d74be76b
fetch_command: in stupid non-diffy mode, take changed paths in account
Patrick Mezard <pmezard@gmail.com>
parents:
79
diff
changeset
|
411 files.append(path) |
88
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
412 else: |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
413 branchprefix = (branchpath and branchpath + '/') or '' |
88
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
414 for path, e in r.paths.iteritems(): |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
415 if not path.startswith(branchprefix): |
87
b033d74be76b
fetch_command: in stupid non-diffy mode, take changed paths in account
Patrick Mezard <pmezard@gmail.com>
parents:
79
diff
changeset
|
416 continue |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
417 if not meta.is_path_valid(path): |
179
a336e3e82648
Fetch: add a filemap argument for use in converting old repositories to
Graham Booker <gbooker@cod3r.com>
parents:
176
diff
changeset
|
418 continue |
88
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
419 kind = svn.checkpath(path, r.revnum) |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
420 path = path[len(branchprefix):] |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
421 if kind == 'f': |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
422 files.append(path) |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
423 elif kind == 'd': |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
424 if e.action == 'M': |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
425 continue |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
426 dirpath = branchprefix + path |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
427 for child, k in svn.list_files(dirpath, r.revnum): |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
428 if k == 'f': |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
429 files.append(path + '/' + child) |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
430 else: |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
431 if path in parentctx: |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
432 files.append(path) |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
433 continue |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
434 # Assume it's a deleted directory |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
435 path = path + '/' |
3b60f223893a
fetch_command: handle nullid parent in stupid non-diffy mode
Patrick Mezard <pmezard@gmail.com>
parents:
87
diff
changeset
|
436 deleted = [f for f in parentctx if f.startswith(path)] |
101
a3b717e4abf5
Cleanups based on pyflakes output.
Augie Fackler <durin42@gmail.com>
parents:
98
diff
changeset
|
437 files += deleted |
87
b033d74be76b
fetch_command: in stupid non-diffy mode, take changed paths in account
Patrick Mezard <pmezard@gmail.com>
parents:
79
diff
changeset
|
438 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
439 copies = getcopies(svn, meta, branch, branchpath, r, files, parentctx) |
101
a3b717e4abf5
Cleanups based on pyflakes output.
Augie Fackler <durin42@gmail.com>
parents:
98
diff
changeset
|
440 |
77
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
441 def filectxfn(repo, memctx, path): |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
442 svnpath = path |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
443 if branchpath: |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
444 svnpath = branchpath + '/' + path |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
445 data, mode = svn.get_file(svnpath, r.revnum) |
77
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
446 isexec = 'x' in mode |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
447 islink = 'l' in mode |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
448 copied = copies.get(path) |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
449 return context.memfilectx(path=path, data=data, islink=islink, |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
450 isexec=isexec, copied=copied) |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
451 |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
452 return files, filectxfn |
ed3dd5bf45da
fetch_command: bypass export3() and checkout manually
Patrick Mezard <pmezard@gmail.com>
parents:
76
diff
changeset
|
453 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
454 def checkbranch(meta, r, branch): |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
455 branchedits = meta.revmap.branchedits(branch, r) |
373
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
456 if not branchedits: |
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
457 return None |
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
458 branchtip = branchedits[0][1] |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
459 for child in meta.repo[branchtip].children(): |
375
af9fc01299b4
Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
374
diff
changeset
|
460 b = child.branch() != 'default' and child.branch() or None |
af9fc01299b4
Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
374
diff
changeset
|
461 if b == branch and child.extra().get('close'): |
373
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
462 return None |
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
463 return branchtip |
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
464 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
465 def branches_in_paths(meta, tbdelta, paths, revnum, checkpath, listdir): |
377
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
466 '''Given a list of paths, return mapping of all branches touched |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
467 to their branch path. |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
468 ''' |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
469 branches = {} |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
470 paths_need_discovery = [] |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
471 for p in paths: |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
472 relpath, branch, branchpath = meta.split_branch_path(p) |
377
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
473 if relpath is not None: |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
474 branches[branch] = branchpath |
517
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
514
diff
changeset
|
475 elif paths[p].action == 'D' and not meta.get_path_tag(p): |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
476 ln = meta.localname(p) |
377
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
477 # must check in branches_to_delete as well, because this runs after we |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
478 # already updated the branch map |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
479 if ln in meta.branches or ln in tbdelta['branches'][1]: |
377
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
480 branches[ln] = p |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
481 else: |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
482 paths_need_discovery.append(p) |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
483 |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
484 if not paths_need_discovery: |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
485 return branches |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
486 |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
487 paths_need_discovery = [(len(p), p) for p in paths_need_discovery] |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
488 paths_need_discovery.sort() |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
489 paths_need_discovery = [p[1] for p in paths_need_discovery] |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
490 actually_files = [] |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
491 while paths_need_discovery: |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
492 p = paths_need_discovery.pop(0) |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
493 path_could_be_file = True |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
494 ind = 0 |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
495 while ind < len(paths_need_discovery) and not paths_need_discovery: |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
496 if op.startswith(p): |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
497 path_could_be_file = False |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
498 ind += 1 |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
499 if path_could_be_file: |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
500 if checkpath(p, revnum) == 'f': |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
501 actually_files.append(p) |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
502 # if there's a copyfrom_path and there were files inside that copyfrom, |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
503 # we need to detect those branches. It's a little thorny and slow, but |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
504 # seems to be the best option. |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
505 elif paths[p].copyfrom_path and not p.startswith('tags/'): |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
506 paths_need_discovery.extend(['%s/%s' % (p,x[0]) |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
507 for x in listdir(p, revnum) |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
508 if x[1] == 'f']) |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
509 |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
510 if not actually_files: |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
511 continue |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
512 |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
513 filepaths = [p.split('/') for p in actually_files] |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
514 filepaths = [(len(p), p) for p in filepaths] |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
515 filepaths.sort() |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
516 filepaths = [p[1] for p in filepaths] |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
517 while filepaths: |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
518 path = filepaths.pop(0) |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
519 parentdir = '/'.join(path[:-1]) |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
520 filepaths = [p for p in filepaths if not '/'.join(p).startswith(parentdir)] |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
521 branchpath = meta.normalize(parentdir) |
377
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
522 if branchpath.startswith('tags/'): |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
523 continue |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
524 branchname = meta.localname(branchpath) |
377
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
525 if branchpath.startswith('trunk/'): |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
526 branches[meta.localname('trunk')] = 'trunk' |
377
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
527 continue |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
528 if branchname and branchname.startswith('../'): |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
529 continue |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
530 branches[branchname] = branchpath |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
531 return branches |
7e9269555e72
Move HgChangeReceiver.branches_in_paths() to the stupid module.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
376
diff
changeset
|
532 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
533 def convert_rev(ui, meta, svn, r, tbdelta): |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
534 # this server fails at replay |
367
ce64d57172a3
Generate separate data structure containing revision's tags/branches changes.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
366
diff
changeset
|
535 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
536 branches = branches_in_paths(meta, tbdelta, r.paths, r.revnum, |
412
5cba60948f92
stupid: eliminate dependency on editor.current
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
537 svn.checkpath, svn.list_files) |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
538 brpaths = branches.values() |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
539 bad_branch_paths = {} |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
540 for br, bp in branches.iteritems(): |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
541 bad_branch_paths[br] = [] |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
542 |
490 | 543 # This next block might be needed, but for now I'm omitting it until it |
544 # can be proven necessary. | |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
545 # for bad in brpaths: |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
546 # if bad.startswith(bp) and len(bad) > len(bp): |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
547 # bad_branch_paths[br].append(bad[len(bp)+1:]) |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
548 |
490 | 549 # We've go a branch that contains other branches. We have to be careful |
550 # to get results similar to real replay in this case. | |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
551 for existingbr in meta.branches: |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
552 bad = meta.remotename(existingbr) |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
553 if bad.startswith(bp) and len(bad) > len(bp): |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
554 bad_branch_paths[br].append(bad[len(bp)+1:]) |
373
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
555 |
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
556 deleted_branches = {} |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
557 for p in r.paths: |
517
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
514
diff
changeset
|
558 if meta.get_path_tag(p): |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
200
diff
changeset
|
559 continue |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
560 branch = meta.localname(p) |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
561 if not (r.paths[p].action == 'R' and branch in meta.branches): |
373
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
562 continue |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
563 closed = checkbranch(meta, r, branch) |
373
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
564 if closed is not None: |
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
565 deleted_branches[branch] = closed |
237
c90cfa665b81
Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
234
diff
changeset
|
566 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
567 date = meta.fixdate(r.date) |
472
ba65e97538d1
stupid: take tbdelta closed branches in account
Patrick Mezard <pmezard@gmail.com>
parents:
452
diff
changeset
|
568 check_deleted_branches = set(tbdelta['branches'][1]) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
569 for b in branches: |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
570 parentctx = meta.repo[meta.get_parent_revision(r.revnum, b)] |
147
22162380c4b9
Improve branch closing in the case of a single-rev replacement of one branch
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
571 if parentctx.branch() != (b or 'default'): |
22162380c4b9
Improve branch closing in the case of a single-rev replacement of one branch
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
572 check_deleted_branches.add(b) |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
573 |
119
ea65fe2b0856
hg_delta_editor: fix update of stray files in branches/
Patrick Mezard <pmezard@gmail.com>
parents:
118
diff
changeset
|
574 kind = svn.checkpath(branches[b], r.revnum) |
ea65fe2b0856
hg_delta_editor: fix update of stray files in branches/
Patrick Mezard <pmezard@gmail.com>
parents:
118
diff
changeset
|
575 if kind != 'd': |
ea65fe2b0856
hg_delta_editor: fix update of stray files in branches/
Patrick Mezard <pmezard@gmail.com>
parents:
118
diff
changeset
|
576 # Branch does not exist at this revision. Get parent revision and |
ea65fe2b0856
hg_delta_editor: fix update of stray files in branches/
Patrick Mezard <pmezard@gmail.com>
parents:
118
diff
changeset
|
577 # remove everything. |
133
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
578 deleted_branches[b] = parentctx.node() |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
129
diff
changeset
|
579 continue |
179
a336e3e82648
Fetch: add a filemap argument for use in converting old repositories to
Graham Booker <gbooker@cod3r.com>
parents:
176
diff
changeset
|
580 |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
581 try: |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
582 files_touched, filectxfn2 = diff_branchrev( |
532
b847e1a3ccd0
stupid: use real branch path in diff_branchrev()
Patrick Mezard <pmezard@gmail.com>
parents:
531
diff
changeset
|
583 ui, svn, meta, b, branches[b], r, parentctx) |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
584 except BadPatchApply, e: |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
585 # Either this revision or the previous one does not exist. |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
586 ui.status("Fetching entire revision: %s.\n" % e.args[0]) |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
587 files_touched, filectxfn2 = fetch_branchrev( |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
588 svn, meta, b, branches[b], r, parentctx) |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
589 |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
590 if meta.layout != 'single': |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
591 externals = fetch_externals(svn, branches[b], r, parentctx) |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
592 if externals is not None: |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
593 files_touched.append('.hgsvnexternals') |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
594 |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
595 def filectxfn(repo, memctx, path): |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
596 if path == '.hgsvnexternals': |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
597 if not externals: |
531
cf4fe45bf8fd
Change all instantiations of IOError to set both errno and strerror.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
529
diff
changeset
|
598 raise IOError(errno.EINVAL, |
cf4fe45bf8fd
Change all instantiations of IOError to set both errno and strerror.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
529
diff
changeset
|
599 '.hgsvnexternals exists, but externals are ' |
cf4fe45bf8fd
Change all instantiations of IOError to set both errno and strerror.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
529
diff
changeset
|
600 'not configured') |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
601 return context.memfilectx(path=path, data=externals.write(), |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
602 islink=False, isexec=False, copied=None) |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
603 for bad in bad_branch_paths[b]: |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
604 if path.startswith(bad): |
531
cf4fe45bf8fd
Change all instantiations of IOError to set both errno and strerror.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
529
diff
changeset
|
605 raise IOError(errno.EINVAL, 'Path %s is bad' % path) |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
606 return filectxfn2(repo, memctx, path) |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
607 |
59
430af23bef4a
Performance fix for branches-from-tags in real replay, which is tied up with
Augie Fackler <durin42@gmail.com>
parents:
58
diff
changeset
|
608 if '' in files_touched: |
430af23bef4a
Performance fix for branches-from-tags in real replay, which is tied up with
Augie Fackler <durin42@gmail.com>
parents:
58
diff
changeset
|
609 files_touched.remove('') |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
610 excluded = [f for f in files_touched if f not in meta.filemap] |
188
f48cd62a9de4
fetch_command: fix coding style
Patrick Mezard <pmezard@gmail.com>
parents:
187
diff
changeset
|
611 for f in excluded: |
f48cd62a9de4
fetch_command: fix coding style
Patrick Mezard <pmezard@gmail.com>
parents:
187
diff
changeset
|
612 files_touched.remove(f) |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
613 |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
614 if parentctx.node() == node.nullid and not files_touched: |
494
6eea269ff134
stupid: remove stray print statements, keep one as a ui.debug
Augie Fackler <durin42@gmail.com>
parents:
490
diff
changeset
|
615 meta.repo.ui.debug('skipping commit since parent is null and no files touched.\n') |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
616 continue |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
617 |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
618 for f in files_touched: |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
619 if f: |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
620 # this is a case that really shouldn't ever happen, it means |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
621 # something is very wrong |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
622 assert f[0] != '/' |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
623 |
422
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
418
diff
changeset
|
624 extra = meta.genextra(r.revnum, b) |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
625 |
517
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
514
diff
changeset
|
626 tag = meta.get_path_tag(meta.remotename(b)) |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
627 if tag: |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
628 if parentctx.node() == node.nullid: |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
629 continue |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
630 extra.update({'branch': parentctx.extra().get('branch', None), |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
631 'close': 1}) |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
632 |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
633 if not meta.usebranchnames or extra.get('branch', None) == 'default': |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
634 extra.pop('branch', None) |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
635 current_ctx = context.memctx(meta.repo, |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
636 [parentctx.node(), revlog.nullid], |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
637 r.message or util.default_commit_msg, |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
638 files_touched, |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
639 filectxfn, |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
640 meta.authors[r.author], |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
641 date, |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
642 extra) |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
643 ha = meta.repo.commitctx(current_ctx) |
401
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
644 |
9e87f7047bf1
stupid: simplify stupid committing code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
377
diff
changeset
|
645 branch = extra.get('branch', None) |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
646 if not tag: |
452
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
647 if (not branch in meta.branches |
517
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
514
diff
changeset
|
648 and not meta.get_path_tag(meta.remotename(branch))): |
452
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
649 meta.branches[branch] = None, 0, r.revnum |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
650 meta.revmap[r.revnum, b] = ha |
452
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
651 else: |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
444
diff
changeset
|
652 meta.movetag(tag, ha, parentctx.extra().get('branch', None), r, date) |
452
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
653 util.describe_commit(ui, ha, b) |
373
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
654 |
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
655 # These are branches with an 'R' status in svn log. This means they were |
147
22162380c4b9
Improve branch closing in the case of a single-rev replacement of one branch
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
656 # replaced by some other branch, so we need to verify they get marked as closed. |
22162380c4b9
Improve branch closing in the case of a single-rev replacement of one branch
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
657 for branch in check_deleted_branches: |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
658 closed = checkbranch(meta, r, branch) |
373
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
659 if closed is not None: |
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
660 deleted_branches[branch] = closed |
8c91e6a69d05
Get rid of duplicate branch closing detection code for stupid mode.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
368
diff
changeset
|
661 |
432
4bf90f8c9b7b
consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
424
diff
changeset
|
662 return deleted_branches |