##// END OF EJS Templates
shrink-revlog: make check-code happier...
Greg Ward -
r16306:d76b9abd default
parent child Browse files
Show More
@@ -1,290 +1,294 b''
1 1 """reorder a revlog (the manifest by default) to save space
2 2
3 3 Specifically, this topologically sorts the revisions in the revlog so that
4 4 revisions on the same branch are adjacent as much as possible. This is a
5 5 workaround for the fact that Mercurial computes deltas relative to the
6 6 previous revision rather than relative to a parent revision.
7 7
8 8 This is *not* safe to run on a changelog.
9 9 """
10 10
11 11 # Originally written by Benoit Boissinot <benoit.boissinot at ens-lyon.org>
12 12 # as a patch to rewrite-log. Cleaned up, refactored, documented, and
13 13 # renamed by Greg Ward <greg at gerg.ca>.
14 14
15 15 # XXX would be nice to have a way to verify the repository after shrinking,
16 16 # e.g. by comparing "before" and "after" states of random changesets
17 17 # (maybe: export before, shrink, export after, diff).
18 18
19 19 import os, errno
20 20 from mercurial import revlog, transaction, node, util, scmutil
21 21 from mercurial import changegroup
22 22 from mercurial.i18n import _
23 23
24 24
25 25 def postorder(start, edges):
26 26 result = []
27 27 visit = list(start)
28 28 finished = set()
29 29
30 30 while visit:
31 31 cur = visit[-1]
32 32 for p in edges[cur]:
33 33 # defend against node.nullrev because it's occasionally
34 34 # possible for a node to have parents (null, something)
35 35 # rather than (something, null)
36 36 if p not in finished and p != node.nullrev:
37 37 visit.append(p)
38 38 break
39 39 else:
40 40 result.append(cur)
41 41 finished.add(cur)
42 42 visit.pop()
43 43
44 44 return result
45 45
46 46 def toposort_reversepostorder(ui, rl):
47 47 # postorder of the reverse directed graph
48 48
49 49 # map rev to list of parent revs (p2 first)
50 50 parents = {}
51 51 heads = set()
52 52 ui.status(_('reading revs\n'))
53 53 try:
54 54 for rev in rl:
55 55 ui.progress(_('reading'), rev, total=len(rl))
56 56 (p1, p2) = rl.parentrevs(rev)
57 57 if p1 == p2 == node.nullrev:
58 58 parents[rev] = () # root node
59 59 elif p1 == p2 or p2 == node.nullrev:
60 60 parents[rev] = (p1,) # normal node
61 61 else:
62 62 parents[rev] = (p2, p1) # merge node
63 63 heads.add(rev)
64 64 for p in parents[rev]:
65 65 heads.discard(p)
66 66 finally:
67 67 ui.progress(_('reading'), None)
68 68
69 69 heads = list(heads)
70 70 heads.sort(reverse=True)
71 71
72 72 ui.status(_('sorting revs\n'))
73 73 return postorder(heads, parents)
74 74
75 75 def toposort_postorderreverse(ui, rl):
76 76 # reverse-postorder of the reverse directed graph
77 77
78 78 children = {}
79 79 roots = set()
80 80 ui.status(_('reading revs\n'))
81 81 try:
82 82 for rev in rl:
83 83 ui.progress(_('reading'), rev, total=len(rl))
84 84 (p1, p2) = rl.parentrevs(rev)
85 85 if p1 == p2 == node.nullrev:
86 86 roots.add(rev)
87 87 children[rev] = []
88 88 if p1 != node.nullrev:
89 89 children[p1].append(rev)
90 90 if p2 != node.nullrev:
91 91 children[p2].append(rev)
92 92 finally:
93 93 ui.progress(_('reading'), None)
94 94
95 95 roots = list(roots)
96 96 roots.sort()
97 97
98 98 ui.status(_('sorting revs\n'))
99 99 result = postorder(roots, children)
100 100 result.reverse()
101 101 return result
102 102
103 103 def writerevs(ui, r1, r2, order, tr):
104 104
105 105 ui.status(_('writing revs\n'))
106 106
107 107
108 108 order = [r1.node(r) for r in order]
109 109
110 110 # this is a bit ugly, but it works
111 111 count = [0]
112 112 def lookup(revl, x):
113 113 count[0] += 1
114 114 ui.progress(_('writing'), count[0], total=len(order))
115 115 return "%020d" % revl.linkrev(revl.rev(x))
116 116
117 117 unlookup = lambda x: int(x, 10)
118 118
119 119 try:
120 120 bundler = changegroup.bundle10(lookup)
121 121 group = util.chunkbuffer(r1.group(order, bundler))
122 122 group = changegroup.unbundle10(group, "UN")
123 123 r2.addgroup(group, unlookup, tr)
124 124 finally:
125 125 ui.progress(_('writing'), None)
126 126
127 127 def report(ui, r1, r2):
128 128 def getsize(r):
129 129 s = 0
130 130 for fn in (r.indexfile, r.datafile):
131 131 try:
132 132 s += os.stat(fn).st_size
133 133 except OSError, inst:
134 134 if inst.errno != errno.ENOENT:
135 135 raise
136 136 return s
137 137
138 138 oldsize = float(getsize(r1))
139 139 newsize = float(getsize(r2))
140 140
141 141 # argh: have to pass an int to %d, because a float >= 2^32
142 142 # blows up under Python 2.5 or earlier
143 143 ui.write(_('old file size: %12d bytes (%6.1f MiB)\n')
144 144 % (int(oldsize), oldsize / 1024 / 1024))
145 145 ui.write(_('new file size: %12d bytes (%6.1f MiB)\n')
146 146 % (int(newsize), newsize / 1024 / 1024))
147 147
148 148 shrink_percent = (oldsize - newsize) / oldsize * 100
149 149 shrink_factor = oldsize / newsize
150 150 ui.write(_('shrinkage: %.1f%% (%.1fx)\n')
151 151 % (shrink_percent, shrink_factor))
152 152
153 153 def shrink(ui, repo, **opts):
154 154 """shrink a revlog by reordering revisions
155 155
156 156 Rewrites all the entries in some revlog of the current repository
157 157 (by default, the manifest log) to save space.
158 158
159 159 Different sort algorithms have different performance
160 160 characteristics. Use ``--sort`` to select a sort algorithm so you
161 161 can determine which works best for your data.
162 162 """
163 163
164 164 if not repo.local():
165 165 raise util.Abort(_('not a local repository: %s') % repo.root)
166 166
167 167 fn = opts.get('revlog')
168 168 if not fn:
169 169 indexfn = repo.sjoin('00manifest.i')
170 170 else:
171 171 if not fn.endswith('.i'):
172 172 raise util.Abort(_('--revlog option must specify the revlog index '
173 173 'file (*.i), not %s') % opts.get('revlog'))
174 174
175 175 indexfn = os.path.realpath(fn)
176 176 store = repo.sjoin('')
177 177 if not indexfn.startswith(store):
178 178 raise util.Abort(_('--revlog option must specify a revlog in %s, '
179 179 'not %s') % (store, indexfn))
180 180
181 181 sortname = opts['sort']
182 182 try:
183 183 toposort = globals()['toposort_' + sortname]
184 184 except KeyError:
185 185 raise util.Abort(_('no such toposort algorithm: %s') % sortname)
186 186
187 187 if not os.path.exists(indexfn):
188 188 raise util.Abort(_('no such file: %s') % indexfn)
189 189 if '00changelog' in indexfn:
190 190 raise util.Abort(_('shrinking the changelog '
191 191 'will corrupt your repository'))
192 192
193 193 ui.write(_('shrinking %s\n') % indexfn)
194 194 tmpindexfn = util.mktempcopy(indexfn, emptyok=True)
195 195
196 196 r1 = revlog.revlog(scmutil.opener(os.getcwd(), audit=False), indexfn)
197 197 r2 = revlog.revlog(scmutil.opener(os.getcwd(), audit=False), tmpindexfn)
198 198
199 199 datafn, tmpdatafn = r1.datafile, r2.datafile
200 200
201 201 oldindexfn = indexfn + '.old'
202 202 olddatafn = datafn + '.old'
203 203 if os.path.exists(oldindexfn) or os.path.exists(olddatafn):
204 204 raise util.Abort(_('one or both of\n'
205 205 ' %s\n'
206 206 ' %s\n'
207 207 'exists from a previous run; please clean up '
208 208 'before running again') % (oldindexfn, olddatafn))
209 209
210 210 # Don't use repo.transaction(), because then things get hairy with
211 211 # paths: some need to be relative to .hg, and some need to be
212 212 # absolute. Doing it this way keeps things simple: everything is an
213 213 # absolute path.
214 214 lock = repo.lock(wait=False)
215 215 tr = transaction.transaction(ui.warn,
216 216 open,
217 217 repo.sjoin('journal'))
218 218
219 219 def ignoremissing(func):
220 220 def f(*args, **kw):
221 221 try:
222 222 return func(*args, **kw)
223 223 except OSError, inst:
224 224 if inst.errno != errno.ENOENT:
225 225 raise
226 226 return f
227 227
228 228 try:
229 229 try:
230 230 order = toposort(ui, r1)
231 231
232 232 suboptimal = 0
233 233 for i in xrange(1, len(order)):
234 234 parents = [p for p in r1.parentrevs(order[i])
235 235 if p != node.nullrev]
236 236 if parents and order[i - 1] not in parents:
237 237 suboptimal += 1
238 238 ui.note(_('%d suboptimal nodes\n') % suboptimal)
239 239
240 240 writerevs(ui, r1, r2, order, tr)
241 241 report(ui, r1, r2)
242 242 tr.close()
243 243 except:
244 244 # Abort transaction first, so we truncate the files before
245 245 # deleting them.
246 246 tr.abort()
247 247 for fn in (tmpindexfn, tmpdatafn):
248 248 ignoremissing(os.unlink)(fn)
249 249 raise
250 250 if not opts.get('dry_run'):
251 251 # racy, both files cannot be renamed atomically
252 252 # copy files
253 253 util.oslink(indexfn, oldindexfn)
254 254 ignoremissing(util.oslink)(datafn, olddatafn)
255 255
256 256 # rename
257 257 util.rename(tmpindexfn, indexfn)
258 258 try:
259 259 os.chmod(tmpdatafn, os.stat(datafn).st_mode)
260 260 util.rename(tmpdatafn, datafn)
261 261 except OSError, inst:
262 262 if inst.errno != errno.ENOENT:
263 263 raise
264 264 ignoremissing(os.unlink)(datafn)
265 265 else:
266 266 for fn in (tmpindexfn, tmpdatafn):
267 267 ignoremissing(os.unlink)(fn)
268 268 finally:
269 269 lock.release()
270 270
271 271 if not opts.get('dry_run'):
272 ui.write(_('note: old revlog saved in:\n'
273 ' %s\n'
274 ' %s\n'
275 '(You can delete those files when you are satisfied that your\n'
276 'repository is still sane. '
277 'Running \'hg verify\' is strongly recommended.)\n')
278 % (oldindexfn, olddatafn))
272 ui.write(
273 _('note: old revlog saved in:\n'
274 ' %s\n'
275 ' %s\n'
276 '(You can delete those files when you are satisfied that your\n'
277 'repository is still sane. '
278 'Running \'hg verify\' is strongly recommended.)\n')
279 % (oldindexfn, olddatafn))
279 280
280 281 cmdtable = {
281 282 'shrink': (shrink,
282 [('', 'revlog', '', _('index (.i) file of the revlog to shrink')),
283 ('n', 'dry-run', None, _('do not shrink, simulate only')),
284 ('', 'sort', 'reversepostorder', 'name of sort algorithm to use'),
283 [('', 'revlog', '',
284 _('the revlog to shrink (.i)')),
285 ('n', 'dry-run', None,
286 _('do not shrink, simulate only')),
287 ('', 'sort', 'reversepostorder',
288 _('name of sort algorithm to use')),
285 289 ],
286 290 _('hg shrink [--revlog PATH]'))
287 291 }
288 292
289 293 if __name__ == "__main__":
290 294 print "shrink-revlog.py is now an extension (see hg help extensions)"
@@ -1,650 +1,641 b''
1 1 $ check_code="$TESTDIR"/../contrib/check-code.py
2 2 $ cd "$TESTDIR"/..
3 3 $ if ! hg identify -q > /dev/null; then
4 4 > echo "skipped: not a Mercurial working dir" >&2
5 5 > exit 80
6 6 > fi
7 7 $ hg manifest | xargs "$check_code" || echo 'FAILURE IS NOT AN OPTION!!!'
8 8
9 9 $ hg manifest | xargs "$check_code" --warnings --nolineno --per-file=0 || true
10 10 contrib/check-code.py:0:
11 11 > # (r'^\s+[^_ \n][^_. \n]+_[^_\n]+\s*=', "don't use underbars in identifiers"),
12 12 warning: line over 80 characters
13 13 contrib/perf.py:0:
14 14 > except:
15 15 warning: naked except clause
16 16 contrib/perf.py:0:
17 17 > #timer(lambda: sum(map(len, repo.dirstate.status(m, [], False, False, False))))
18 18 warning: line over 80 characters
19 19 contrib/perf.py:0:
20 20 > except:
21 21 warning: naked except clause
22 22 contrib/setup3k.py:0:
23 23 > except:
24 24 warning: naked except clause
25 25 contrib/setup3k.py:0:
26 26 > except:
27 27 warning: naked except clause
28 28 contrib/setup3k.py:0:
29 29 > except:
30 30 warning: naked except clause
31 31 warning: naked except clause
32 32 warning: naked except clause
33 33 contrib/shrink-revlog.py:0:
34 > '(You can delete those files when you are satisfied that your\n'
35 warning: line over 80 characters
36 contrib/shrink-revlog.py:0:
37 > ('', 'sort', 'reversepostorder', 'name of sort algorithm to use'),
38 warning: line over 80 characters
39 contrib/shrink-revlog.py:0:
40 > [('', 'revlog', '', _('index (.i) file of the revlog to shrink')),
41 warning: line over 80 characters
42 contrib/shrink-revlog.py:0:
43 34 > except:
44 35 warning: naked except clause
45 36 doc/gendoc.py:0:
46 37 > "together with Mercurial. Help for other extensions is available "
47 38 warning: line over 80 characters
48 39 hgext/bugzilla.py:0:
49 40 > raise util.Abort(_('cannot find bugzilla user id for %s or %s') %
50 41 warning: line over 80 characters
51 42 hgext/bugzilla.py:0:
52 43 > bzdir = self.ui.config('bugzilla', 'bzdir', '/var/www/html/bugzilla')
53 44 warning: line over 80 characters
54 45 hgext/convert/__init__.py:0:
55 46 > ('', 'ancestors', '', _('show current changeset in ancestor branches')),
56 47 warning: line over 80 characters
57 48 hgext/convert/bzr.py:0:
58 49 > except:
59 50 warning: naked except clause
60 51 hgext/convert/common.py:0:
61 52 > except:
62 53 warning: naked except clause
63 54 hgext/convert/common.py:0:
64 55 > except:
65 56 warning: naked except clause
66 57 warning: naked except clause
67 58 hgext/convert/convcmd.py:0:
68 59 > except:
69 60 warning: naked except clause
70 61 hgext/convert/cvs.py:0:
71 62 > # /1 :pserver:user@example.com:2401/cvsroot/foo Ah<Z
72 63 warning: line over 80 characters
73 64 hgext/convert/cvsps.py:0:
74 65 > assert len(branches) == 1, 'unknown branch: %s' % e.mergepoint
75 66 warning: line over 80 characters
76 67 hgext/convert/cvsps.py:0:
77 68 > ui.write('Ancestors: %s\n' % (','.join(r)))
78 69 warning: unwrapped ui message
79 70 hgext/convert/cvsps.py:0:
80 71 > ui.write('Parent: %d\n' % cs.parents[0].id)
81 72 warning: unwrapped ui message
82 73 hgext/convert/cvsps.py:0:
83 74 > ui.write('Parents: %s\n' %
84 75 warning: unwrapped ui message
85 76 hgext/convert/cvsps.py:0:
86 77 > except:
87 78 warning: naked except clause
88 79 hgext/convert/cvsps.py:0:
89 80 > ui.write('Branchpoints: %s \n' % ', '.join(branchpoints))
90 81 warning: unwrapped ui message
91 82 hgext/convert/cvsps.py:0:
92 83 > ui.write('Author: %s\n' % cs.author)
93 84 warning: unwrapped ui message
94 85 hgext/convert/cvsps.py:0:
95 86 > ui.write('Branch: %s\n' % (cs.branch or 'HEAD'))
96 87 warning: unwrapped ui message
97 88 hgext/convert/cvsps.py:0:
98 89 > ui.write('Date: %s\n' % util.datestr(cs.date,
99 90 warning: unwrapped ui message
100 91 hgext/convert/cvsps.py:0:
101 92 > ui.write('Log:\n')
102 93 warning: unwrapped ui message
103 94 hgext/convert/cvsps.py:0:
104 95 > ui.write('Members: \n')
105 96 warning: unwrapped ui message
106 97 hgext/convert/cvsps.py:0:
107 98 > ui.write('PatchSet %d \n' % cs.id)
108 99 warning: unwrapped ui message
109 100 hgext/convert/cvsps.py:0:
110 101 > ui.write('Tag%s: %s \n' % (['', 's'][len(cs.tags) > 1],
111 102 warning: unwrapped ui message
112 103 hgext/convert/git.py:0:
113 104 > except:
114 105 warning: naked except clause
115 106 hgext/convert/git.py:0:
116 107 > fh = self.gitopen('git diff-tree --name-only --root -r %s "%s^%s" --'
117 108 warning: line over 80 characters
118 109 hgext/convert/hg.py:0:
119 110 > # detect missing revlogs and abort on errors or populate self.ignored
120 111 warning: line over 80 characters
121 112 hgext/convert/hg.py:0:
122 113 > except:
123 114 warning: naked except clause
124 115 warning: naked except clause
125 116 hgext/convert/hg.py:0:
126 117 > except:
127 118 warning: naked except clause
128 119 hgext/convert/monotone.py:0:
129 120 > except:
130 121 warning: naked except clause
131 122 hgext/convert/monotone.py:0:
132 123 > except:
133 124 warning: naked except clause
134 125 hgext/convert/subversion.py:0:
135 126 > raise util.Abort(_('svn: branch has no revision %s') % to_revnum)
136 127 warning: line over 80 characters
137 128 hgext/convert/subversion.py:0:
138 129 > except:
139 130 warning: naked except clause
140 131 hgext/convert/subversion.py:0:
141 132 > args = [self.baseurl, relpaths, start, end, limit, discover_changed_paths,
142 133 warning: line over 80 characters
143 134 hgext/convert/subversion.py:0:
144 135 > self.trunkname = self.ui.config('convert', 'svn.trunk', 'trunk').strip('/')
145 136 warning: line over 80 characters
146 137 hgext/convert/subversion.py:0:
147 138 > except:
148 139 warning: naked except clause
149 140 hgext/convert/subversion.py:0:
150 141 > def get_log_child(fp, url, paths, start, end, limit=0, discover_changed_paths=True,
151 142 warning: line over 80 characters
152 143 hgext/eol.py:0:
153 144 > if ui.configbool('eol', 'fix-trailing-newline', False) and s and s[-1] != '\n':
154 145 warning: line over 80 characters
155 146 warning: line over 80 characters
156 147 hgext/gpg.py:0:
157 148 > except:
158 149 warning: naked except clause
159 150 hgext/hgcia.py:0:
160 151 > except:
161 152 warning: naked except clause
162 153 hgext/hgk.py:0:
163 154 > ui.write("%s%s\n" % (prefix, description.replace('\n', nlprefix).strip()))
164 155 warning: line over 80 characters
165 156 hgext/hgk.py:0:
166 157 > ui.write("parent %s\n" % p)
167 158 warning: unwrapped ui message
168 159 hgext/hgk.py:0:
169 160 > ui.write('k=%s\nv=%s\n' % (name, value))
170 161 warning: unwrapped ui message
171 162 hgext/hgk.py:0:
172 163 > ui.write("author %s %s %s\n" % (ctx.user(), int(date[0]), date[1]))
173 164 warning: unwrapped ui message
174 165 hgext/hgk.py:0:
175 166 > ui.write("branch %s\n\n" % ctx.branch())
176 167 warning: unwrapped ui message
177 168 hgext/hgk.py:0:
178 169 > ui.write("committer %s %s %s\n" % (committer, int(date[0]), date[1]))
179 170 warning: unwrapped ui message
180 171 hgext/hgk.py:0:
181 172 > ui.write("revision %d\n" % ctx.rev())
182 173 warning: unwrapped ui message
183 174 hgext/hgk.py:0:
184 175 > ui.write("tree %s\n" % short(ctx.changeset()[0])) # use ctx.node() instead ??
185 176 warning: line over 80 characters
186 177 warning: unwrapped ui message
187 178 hgext/highlight/__init__.py:0:
188 179 > extensions.wrapfunction(webcommands, '_filerevision', filerevision_highlight)
189 180 warning: line over 80 characters
190 181 hgext/highlight/__init__.py:0:
191 182 > return ['/* pygments_style = %s */\n\n' % pg_style, fmter.get_style_defs('')]
192 183 warning: line over 80 characters
193 184 hgext/inotify/__init__.py:0:
194 185 > if self._inotifyon and not ignored and not subrepos and not self._dirty:
195 186 warning: line over 80 characters
196 187 hgext/inotify/server.py:0:
197 188 > except:
198 189 warning: naked except clause
199 190 hgext/inotify/server.py:0:
200 191 > except:
201 192 warning: naked except clause
202 193 hgext/keyword.py:0:
203 194 > ui.note("hg ci -m '%s'\n" % msg)
204 195 warning: unwrapped ui message
205 196 hgext/mq.py:0:
206 197 > raise util.Abort(_("cannot push --exact with applied patches"))
207 198 warning: line over 80 characters
208 199 hgext/mq.py:0:
209 200 > raise util.Abort(_("cannot use --exact and --move together"))
210 201 warning: line over 80 characters
211 202 hgext/mq.py:0:
212 203 > self.ui.warn(_('Tag %s overrides mq patch of the same name\n')
213 204 warning: line over 80 characters
214 205 hgext/mq.py:0:
215 206 > except:
216 207 warning: naked except clause
217 208 warning: naked except clause
218 209 hgext/mq.py:0:
219 210 > except:
220 211 warning: naked except clause
221 212 warning: naked except clause
222 213 warning: naked except clause
223 214 warning: naked except clause
224 215 hgext/mq.py:0:
225 216 > raise util.Abort(_('cannot mix -l/--list with options or arguments'))
226 217 warning: line over 80 characters
227 218 hgext/mq.py:0:
228 219 > raise util.Abort(_('qfold cannot fold already applied patch %s') % p)
229 220 warning: line over 80 characters
230 221 hgext/mq.py:0:
231 222 > ('', 'move', None, _('reorder patch series and apply only the patch'))],
232 223 warning: line over 80 characters
233 224 hgext/mq.py:0:
234 225 > ('U', 'noupdate', None, _('do not update the new working directories')),
235 226 warning: line over 80 characters
236 227 hgext/mq.py:0:
237 228 > ('e', 'exact', None, _('apply the target patch to its recorded parent')),
238 229 warning: line over 80 characters
239 230 hgext/mq.py:0:
240 231 > except:
241 232 warning: naked except clause
242 233 hgext/mq.py:0:
243 234 > ui.write("mq: %s\n" % ', '.join(m))
244 235 warning: unwrapped ui message
245 236 hgext/mq.py:0:
246 237 > repo.mq.qseries(repo, missing=opts.get('missing'), summary=opts.get('summary'))
247 238 warning: line over 80 characters
248 239 hgext/notify.py:0:
249 240 > ui.note(_('notify: suppressing notification for merge %d:%s\n') %
250 241 warning: line over 80 characters
251 242 hgext/patchbomb.py:0:
252 243 > binnode, seqno=idx, total=total)
253 244 warning: line over 80 characters
254 245 hgext/patchbomb.py:0:
255 246 > except:
256 247 warning: naked except clause
257 248 hgext/patchbomb.py:0:
258 249 > ui.write('Subject: %s\n' % subj)
259 250 warning: unwrapped ui message
260 251 hgext/patchbomb.py:0:
261 252 > p = mail.mimetextpatch('\n'.join(patchlines), 'x-patch', opts.get('test'))
262 253 warning: line over 80 characters
263 254 hgext/patchbomb.py:0:
264 255 > ui.write('From: %s\n' % sender)
265 256 warning: unwrapped ui message
266 257 hgext/record.py:0:
267 258 > ignoreblanklines=opts.get('ignore_blank_lines'))
268 259 warning: line over 80 characters
269 260 hgext/record.py:0:
270 261 > ignorewsamount=opts.get('ignore_space_change'),
271 262 warning: line over 80 characters
272 263 hgext/zeroconf/__init__.py:0:
273 264 > publish(name, desc, path, util.getport(u.config("web", "port", 8000)))
274 265 warning: line over 80 characters
275 266 hgext/zeroconf/__init__.py:0:
276 267 > except:
277 268 warning: naked except clause
278 269 warning: naked except clause
279 270 mercurial/bundlerepo.py:0:
280 271 > is a bundlerepo for the obtained bundle when the original "other" is remote.
281 272 warning: line over 80 characters
282 273 mercurial/bundlerepo.py:0:
283 274 > "local" is a local repo from which to obtain the actual incoming changesets; it
284 275 warning: line over 80 characters
285 276 mercurial/bundlerepo.py:0:
286 277 > tmp = discovery.findcommonincoming(repo, other, heads=onlyheads, force=force)
287 278 warning: line over 80 characters
288 279 mercurial/commands.py:0:
289 280 > " size " + basehdr + " link p1 p2 nodeid\n")
290 281 warning: line over 80 characters
291 282 mercurial/commands.py:0:
292 283 > raise util.Abort('cannot use localheads with old style discovery')
293 284 warning: line over 80 characters
294 285 mercurial/commands.py:0:
295 286 > ui.note('branch %s\n' % data)
296 287 warning: unwrapped ui message
297 288 mercurial/commands.py:0:
298 289 > ui.note('node %s\n' % str(data))
299 290 warning: unwrapped ui message
300 291 mercurial/commands.py:0:
301 292 > ui.note('tag %s\n' % name)
302 293 warning: unwrapped ui message
303 294 mercurial/commands.py:0:
304 295 > ui.write("unpruned common: %s\n" % " ".join([short(n)
305 296 warning: unwrapped ui message
306 297 mercurial/commands.py:0:
307 298 > yield 'n', (r, list(set(p for p in cl.parentrevs(r) if p != -1)))
308 299 warning: line over 80 characters
309 300 mercurial/commands.py:0:
310 301 > yield 'n', (r, list(set(p for p in rlog.parentrevs(r) if p != -1)))
311 302 warning: line over 80 characters
312 303 mercurial/commands.py:0:
313 304 > except:
314 305 warning: naked except clause
315 306 mercurial/commands.py:0:
316 307 > ui.status(_("(run 'hg heads .' to see heads, 'hg merge' to merge)\n"))
317 308 warning: line over 80 characters
318 309 mercurial/commands.py:0:
319 310 > ui.write("format: id, p1, p2, cset, delta base, len(delta)\n")
320 311 warning: unwrapped ui message
321 312 mercurial/commands.py:0:
322 313 > ui.write("local is subset\n")
323 314 warning: unwrapped ui message
324 315 mercurial/commands.py:0:
325 316 > ui.write("remote is subset\n")
326 317 warning: unwrapped ui message
327 318 mercurial/commands.py:0:
328 319 > ui.write(' other : ' + fmt2 % pcfmt(numoprev, numprev))
329 320 warning: line over 80 characters
330 321 mercurial/commands.py:0:
331 322 > ui.write(' where prev = p1 : ' + fmt2 % pcfmt(nump1prev, numprev))
332 323 warning: line over 80 characters
333 324 mercurial/commands.py:0:
334 325 > ui.write(' where prev = p2 : ' + fmt2 % pcfmt(nump2prev, numprev))
335 326 warning: line over 80 characters
336 327 mercurial/commands.py:0:
337 328 > ui.write('deltas against other : ' + fmt % pcfmt(numother, numdeltas))
338 329 warning: line over 80 characters
339 330 warning: unwrapped ui message
340 331 mercurial/commands.py:0:
341 332 > ui.write('deltas against p1 : ' + fmt % pcfmt(nump1, numdeltas))
342 333 warning: unwrapped ui message
343 334 mercurial/commands.py:0:
344 335 > ui.write('deltas against p2 : ' + fmt % pcfmt(nump2, numdeltas))
345 336 warning: unwrapped ui message
346 337 mercurial/commands.py:0:
347 338 > cmd, ext, mod = extensions.disabledcmd(ui, name, ui.config('ui', 'strict'))
348 339 warning: line over 80 characters
349 340 mercurial/commands.py:0:
350 341 > except:
351 342 warning: naked except clause
352 343 mercurial/commands.py:0:
353 344 > revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev'))
354 345 warning: line over 80 characters
355 346 mercurial/commands.py:0:
356 347 > ui.write("common heads: %s\n" % " ".join([short(n) for n in common]))
357 348 warning: unwrapped ui message
358 349 mercurial/commands.py:0:
359 350 > ui.write("match: %s\n" % m(d[0]))
360 351 warning: unwrapped ui message
361 352 mercurial/commands.py:0:
362 353 > ui.write('deltas against prev : ' + fmt % pcfmt(numprev, numdeltas))
363 354 warning: unwrapped ui message
364 355 mercurial/commands.py:0:
365 356 > ui.write('path %s\n' % k)
366 357 warning: unwrapped ui message
367 358 mercurial/commands.py:0:
368 359 > ui.write('uncompressed data size (min/max/avg) : %d / %d / %d\n'
369 360 warning: unwrapped ui message
370 361 mercurial/commands.py:0:
371 362 > Every ID must be a full-length hex node id string. Returns a list of 0s and 1s
372 363 warning: line over 80 characters
373 364 mercurial/commands.py:0:
374 365 > remoteurl, branches = hg.parseurl(ui.expandpath(remoteurl), opts.get('branch'))
375 366 warning: line over 80 characters
376 367 mercurial/commands.py:0:
377 368 > ui.write("digraph G {\n")
378 369 warning: unwrapped ui message
379 370 mercurial/commands.py:0:
380 371 > ui.write("internal: %s %s\n" % d)
381 372 warning: unwrapped ui message
382 373 mercurial/commands.py:0:
383 374 > ui.write("standard: %s\n" % util.datestr(d))
384 375 warning: unwrapped ui message
385 376 mercurial/commands.py:0:
386 377 > ui.write('avg chain length : ' + fmt % avgchainlen)
387 378 warning: unwrapped ui message
388 379 mercurial/commands.py:0:
389 380 > ui.write('case-sensitive: %s\n' % (util.checkcase('.debugfsinfo')
390 381 warning: unwrapped ui message
391 382 mercurial/commands.py:0:
392 383 > ui.write('compression ratio : ' + fmt % compratio)
393 384 warning: unwrapped ui message
394 385 mercurial/commands.py:0:
395 386 > ui.write('delta size (min/max/avg) : %d / %d / %d\n'
396 387 warning: unwrapped ui message
397 388 mercurial/commands.py:0:
398 389 > ui.write('exec: %s\n' % (util.checkexec(path) and 'yes' or 'no'))
399 390 warning: unwrapped ui message
400 391 mercurial/commands.py:0:
401 392 > ui.write('flags : %s\n' % ', '.join(flags))
402 393 warning: unwrapped ui message
403 394 mercurial/commands.py:0:
404 395 > ui.write('format : %d\n' % format)
405 396 warning: unwrapped ui message
406 397 mercurial/commands.py:0:
407 398 > ui.write('full revision size (min/max/avg) : %d / %d / %d\n'
408 399 warning: unwrapped ui message
409 400 mercurial/commands.py:0:
410 401 > ui.write('revision size : ' + fmt2 % totalsize)
411 402 warning: unwrapped ui message
412 403 mercurial/commands.py:0:
413 404 > ui.write('revisions : ' + fmt2 % numrevs)
414 405 warning: unwrapped ui message
415 406 warning: unwrapped ui message
416 407 mercurial/commands.py:0:
417 408 > ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no'))
418 409 warning: unwrapped ui message
419 410 mercurial/commandserver.py:0:
420 411 > # the ui here is really the repo ui so take its baseui so we don't end up
421 412 warning: line over 80 characters
422 413 mercurial/context.py:0:
423 414 > return self._manifestdelta[path], self._manifestdelta.flags(path)
424 415 warning: line over 80 characters
425 416 mercurial/dagparser.py:0:
426 417 > raise util.Abort(_("invalid character in dag description: %s...") % s)
427 418 warning: line over 80 characters
428 419 mercurial/dagparser.py:0:
429 420 > >>> dagtext([('n', (0, [-1])), ('C', 'my command line'), ('n', (1, [0]))])
430 421 warning: line over 80 characters
431 422 mercurial/dirstate.py:0:
432 423 > if not st is None and not getkind(st.st_mode) in (regkind, lnkkind):
433 424 warning: line over 80 characters
434 425 mercurial/discovery.py:0:
435 426 > If onlyheads is given, only nodes ancestral to nodes in onlyheads (inclusive)
436 427 warning: line over 80 characters
437 428 mercurial/discovery.py:0:
438 429 > def findcommonoutgoing(repo, other, onlyheads=None, force=False, commoninc=None):
439 430 warning: line over 80 characters
440 431 mercurial/dispatch.py:0:
441 432 > " (.hg not found)") % os.getcwd())
442 433 warning: line over 80 characters
443 434 mercurial/dispatch.py:0:
444 435 > aliases, entry = cmdutil.findcmd(cmd, cmdtable, lui.config("ui", "strict"))
445 436 warning: line over 80 characters
446 437 mercurial/dispatch.py:0:
447 438 > except:
448 439 warning: naked except clause
449 440 mercurial/dispatch.py:0:
450 441 > return lambda: runcommand(lui, None, cmd, args[:1], ui, options, d, [], {})
451 442 warning: line over 80 characters
452 443 mercurial/dispatch.py:0:
453 444 > def __init__(self, args, ui=None, repo=None, fin=None, fout=None, ferr=None):
454 445 warning: line over 80 characters
455 446 mercurial/dispatch.py:0:
456 447 > except:
457 448 warning: naked except clause
458 449 mercurial/hg.py:0:
459 450 > except:
460 451 warning: naked except clause
461 452 mercurial/hgweb/hgweb_mod.py:0:
462 453 > self.maxshortchanges = int(self.config("web", "maxshortchanges", 60))
463 454 warning: line over 80 characters
464 455 mercurial/keepalive.py:0:
465 456 > except:
466 457 warning: naked except clause
467 458 mercurial/keepalive.py:0:
468 459 > except:
469 460 warning: naked except clause
470 461 mercurial/localrepo.py:0:
471 462 > # we return an integer indicating remote head count change
472 463 warning: line over 80 characters
473 464 mercurial/localrepo.py:0:
474 465 > raise util.Abort(_("empty or missing revlog for %s") % fname)
475 466 warning: line over 80 characters
476 467 warning: line over 80 characters
477 468 mercurial/localrepo.py:0:
478 469 > if self._tagscache.tagtypes and name in self._tagscache.tagtypes:
479 470 warning: line over 80 characters
480 471 mercurial/localrepo.py:0:
481 472 > self.hook("precommit", throw=True, parent1=hookp1, parent2=hookp2)
482 473 warning: line over 80 characters
483 474 mercurial/localrepo.py:0:
484 475 > # new requirements = old non-format requirements + new format-related
485 476 warning: line over 80 characters
486 477 mercurial/localrepo.py:0:
487 478 > except:
488 479 warning: naked except clause
489 480 mercurial/localrepo.py:0:
490 481 > """return status of files between two nodes or node and working directory
491 482 warning: line over 80 characters
492 483 mercurial/localrepo.py:0:
493 484 > '''Returns a tagscache object that contains various tags related caches.'''
494 485 warning: line over 80 characters
495 486 mercurial/manifest.py:0:
496 487 > return "".join(struct.pack(">lll", start, end, len(content)) + content
497 488 warning: line over 80 characters
498 489 mercurial/merge.py:0:
499 490 > subrepo.submerge(repo, wctx, mctx, wctx.ancestor(mctx), overwrite)
500 491 warning: line over 80 characters
501 492 mercurial/patch.py:0:
502 493 > modified, added, removed, copy, getfilectx, opts, losedata, prefix)
503 494 warning: line over 80 characters
504 495 mercurial/patch.py:0:
505 496 > diffhelpers.addlines(lr, self.hunk, self.lena, self.lenb, self.a, self.b)
506 497 warning: line over 80 characters
507 498 mercurial/patch.py:0:
508 499 > output.append(_(' %d files changed, %d insertions(+), %d deletions(-)\n')
509 500 warning: line over 80 characters
510 501 mercurial/patch.py:0:
511 502 > except:
512 503 warning: naked except clause
513 504 mercurial/pure/base85.py:0:
514 505 > raise OverflowError('Base85 overflow in hunk starting at byte %d' % i)
515 506 warning: line over 80 characters
516 507 mercurial/pure/mpatch.py:0:
517 508 > frags.extend(reversed(new)) # what was left at the end
518 509 warning: line over 80 characters
519 510 mercurial/repair.py:0:
520 511 > except:
521 512 warning: naked except clause
522 513 mercurial/repair.py:0:
523 514 > except:
524 515 warning: naked except clause
525 516 mercurial/revset.py:0:
526 517 > elif c.isalnum() or c in '._' or ord(c) > 127: # gather up a symbol/keyword
527 518 warning: line over 80 characters
528 519 mercurial/revset.py:0:
529 520 > Changesets that are the Nth ancestor (first parents only) of a changeset in set.
530 521 warning: line over 80 characters
531 522 mercurial/scmutil.py:0:
532 523 > raise util.Abort(_("path '%s' is inside nested repo %r") %
533 524 warning: line over 80 characters
534 525 mercurial/scmutil.py:0:
535 526 > "requires features '%s' (upgrade Mercurial)") % "', '".join(missings))
536 527 warning: line over 80 characters
537 528 mercurial/scmutil.py:0:
538 529 > elif repo.dirstate[abs] != 'r' and (not good or not os.path.lexists(target)
539 530 warning: line over 80 characters
540 531 mercurial/setdiscovery.py:0:
541 532 > # treat remote heads (and maybe own heads) as a first implicit sample response
542 533 warning: line over 80 characters
543 534 mercurial/setdiscovery.py:0:
544 535 > undecided = dag.nodeset() # own nodes where I don't know if remote knows them
545 536 warning: line over 80 characters
546 537 mercurial/similar.py:0:
547 538 > repo.ui.progress(_('searching for similar files'), i, total=len(removed))
548 539 warning: line over 80 characters
549 540 mercurial/simplemerge.py:0:
550 541 > for zmatch, zend, amatch, aend, bmatch, bend in self.find_sync_regions():
551 542 warning: line over 80 characters
552 543 mercurial/sshrepo.py:0:
553 544 > self._abort(error.RepoError(_("no suitable response from remote hg")))
554 545 warning: line over 80 characters
555 546 mercurial/sshrepo.py:0:
556 547 > except:
557 548 warning: naked except clause
558 549 mercurial/subrepo.py:0:
559 550 > other, self._repo = hg.clone(self._repo._subparent.ui, {}, other,
560 551 warning: line over 80 characters
561 552 mercurial/subrepo.py:0:
562 553 > msg = (_(' subrepository sources for %s differ (in checked out version)\n'
563 554 warning: line over 80 characters
564 555 mercurial/transaction.py:0:
565 556 > except:
566 557 warning: naked except clause
567 558 mercurial/ui.py:0:
568 559 > traceback.print_exception(exc[0], exc[1], exc[2], file=self.ferr)
569 560 warning: line over 80 characters
570 561 mercurial/url.py:0:
571 562 > conn = httpsconnection(host, port, keyfile, certfile, *args, **kwargs)
572 563 warning: line over 80 characters
573 564 mercurial/util.py:0:
574 565 > except:
575 566 warning: naked except clause
576 567 mercurial/util.py:0:
577 568 > except:
578 569 warning: naked except clause
579 570 mercurial/verify.py:0:
580 571 > except:
581 572 warning: naked except clause
582 573 mercurial/verify.py:0:
583 574 > except:
584 575 warning: naked except clause
585 576 mercurial/wireproto.py:0:
586 577 > # Assuming the future to be filled with the result from the batched request
587 578 warning: line over 80 characters
588 579 mercurial/wireproto.py:0:
589 580 > '''remote must support _submitbatch(encbatch) and _submitone(op, encargs)'''
590 581 warning: line over 80 characters
591 582 mercurial/wireproto.py:0:
592 583 > All methods invoked on instances of this class are simply queued and return a
593 584 warning: line over 80 characters
594 585 mercurial/wireproto.py:0:
595 586 > The decorator returns a function which wraps this coroutine as a plain method,
596 587 warning: line over 80 characters
597 588 setup.py:0:
598 589 > raise SystemExit("Python headers are required to build Mercurial")
599 590 warning: line over 80 characters
600 591 setup.py:0:
601 592 > except:
602 593 warning: naked except clause
603 594 setup.py:0:
604 595 > # build_py), it will not find osutil & friends, thinking that those modules are
605 596 warning: line over 80 characters
606 597 setup.py:0:
607 598 > except:
608 599 warning: naked except clause
609 600 warning: naked except clause
610 601 setup.py:0:
611 602 > isironpython = platform.python_implementation().lower().find("ironpython") != -1
612 603 warning: line over 80 characters
613 604 setup.py:0:
614 605 > except:
615 606 warning: naked except clause
616 607 warning: naked except clause
617 608 warning: naked except clause
618 609 tests/autodiff.py:0:
619 610 > ui.write('data lost for: %s\n' % fn)
620 611 warning: unwrapped ui message
621 612 tests/run-tests.py:0:
622 613 > except:
623 614 warning: naked except clause
624 615 tests/test-commandserver.py:0:
625 616 > 'hooks.pre-identify=python:test-commandserver.hook', 'id'],
626 617 warning: line over 80 characters
627 618 tests/test-commandserver.py:0:
628 619 > # the cached repo local hgrc contains ui.foo=bar, so showconfig should show it
629 620 warning: line over 80 characters
630 621 tests/test-commandserver.py:0:
631 622 > print '%c, %r' % (ch, re.sub('encoding: [a-zA-Z0-9-]+', 'encoding: ***', data))
632 623 warning: line over 80 characters
633 624 tests/test-filecache.py:0:
634 625 > except:
635 626 warning: naked except clause
636 627 tests/test-filecache.py:0:
637 628 > if subprocess.call(['python', '%s/hghave' % os.environ['TESTDIR'], 'cacheable']):
638 629 warning: line over 80 characters
639 630 tests/test-ui-color.py:0:
640 631 > testui.warn('warning\n')
641 632 warning: unwrapped ui message
642 633 tests/test-ui-color.py:0:
643 634 > testui.write('buffered\n')
644 635 warning: unwrapped ui message
645 636 tests/test-walkrepo.py:0:
646 637 > print "Found %d repositories when I should have found 2" % (len(reposet),)
647 638 warning: line over 80 characters
648 639 tests/test-walkrepo.py:0:
649 640 > print "Found %d repositories when I should have found 3" % (len(reposet),)
650 641 warning: line over 80 characters
General Comments 0
You need to be logged in to leave comments. Login now