Mercurial > hg
annotate mercurial/repair.py @ 32821:9b7d615108d7
smartset: micro optimize spanset.slice() to narrow range accordingly
-1ms isn't significant, but seems not bad.
revset #0: limit(0:9999, 100, 9000)
6) 0.001145
7) 0.000214
revset #3: last(0:9999, 100)
6) 0.000197
7) 0.000171
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Fri, 10 Apr 2015 00:14:16 +0900 |
parents | 71eb6a098315 |
children | 0a41902879d3 |
rev | line source |
---|---|
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 # repair.py - functions for repository repair for mercurial |
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 # |
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
3 # Copyright 2005, 2006 Chris Mason <mason@suse.com> |
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 # Copyright 2007 Matt Mackall |
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
5 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8073
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
10263 | 7 # GNU General Public License version 2 or any later version. |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
8 |
25970
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
9 from __future__ import absolute_import |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
10 |
16440
692bf06bb1af
repair: fix missing import
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
16388
diff
changeset
|
11 import errno |
29341
0d83ad967bf8
cleanup: replace uses of util.(md5|sha1|sha256|sha512) with hashlib.\1
Augie Fackler <raf@durin42.com>
parents:
29196
diff
changeset
|
12 import hashlib |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
13 |
25970
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
14 from .i18n import _ |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
15 from .node import short |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
16 from . import ( |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
17 bundle2, |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
18 changegroup, |
32468
4c4d91908492
strip: use the 'writenewbundle' function to get bundle on disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32296
diff
changeset
|
19 discovery, |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26425
diff
changeset
|
20 error, |
25970
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
21 exchange, |
28868
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
22 obsolete, |
25970
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
23 util, |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
24 ) |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
25 |
32628
5732e6d2b369
strip: do not include obsolescence markers for the temporary bundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32623
diff
changeset
|
26 def _bundle(repo, bases, heads, node, suffix, compress=True, obsolescence=True): |
5905
3afbd82a6c82
repair.py: don't use nested functions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5904
diff
changeset
|
27 """create a bundle with the specified revisions as a backup""" |
23898
b21c2e0ee8a3
repair: add experimental option to write bundle2 files
Eric Sumner <ericsumner@fb.com>
parents:
23895
diff
changeset
|
28 |
20977
a57dcd11be34
repair: make paths in "_bundle()" relative to ".hg"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20975
diff
changeset
|
29 backupdir = "strip-backup" |
a57dcd11be34
repair: make paths in "_bundle()" relative to ".hg"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20975
diff
changeset
|
30 vfs = repo.vfs |
a57dcd11be34
repair: make paths in "_bundle()" relative to ".hg"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20975
diff
changeset
|
31 if not vfs.isdir(backupdir): |
a57dcd11be34
repair: make paths in "_bundle()" relative to ".hg"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20975
diff
changeset
|
32 vfs.mkdir(backupdir) |
23835
aa4a1672583e
bundles: do not overwrite existing backup bundles (BC)
Durham Goode <durham@fb.com>
parents:
22818
diff
changeset
|
33 |
aa4a1672583e
bundles: do not overwrite existing backup bundles (BC)
Durham Goode <durham@fb.com>
parents:
22818
diff
changeset
|
34 # Include a hash of all the nodes in the filename for uniqueness |
25340
28800ab40395
repair: use _hexlist() to build revset expression from binary nodes
Yuya Nishihara <yuya@tcha.org>
parents:
25300
diff
changeset
|
35 allcommits = repo.set('%ln::%ln', bases, heads) |
23835
aa4a1672583e
bundles: do not overwrite existing backup bundles (BC)
Durham Goode <durham@fb.com>
parents:
22818
diff
changeset
|
36 allhashes = sorted(c.hex() for c in allcommits) |
29341
0d83ad967bf8
cleanup: replace uses of util.(md5|sha1|sha256|sha512) with hashlib.\1
Augie Fackler <raf@durin42.com>
parents:
29196
diff
changeset
|
37 totalhash = hashlib.sha1(''.join(allhashes)).hexdigest() |
23835
aa4a1672583e
bundles: do not overwrite existing backup bundles (BC)
Durham Goode <durham@fb.com>
parents:
22818
diff
changeset
|
38 name = "%s/%s-%s-%s.hg" % (backupdir, short(node), totalhash[:8], suffix) |
aa4a1672583e
bundles: do not overwrite existing backup bundles (BC)
Durham Goode <durham@fb.com>
parents:
22818
diff
changeset
|
39 |
32468
4c4d91908492
strip: use the 'writenewbundle' function to get bundle on disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32296
diff
changeset
|
40 cgversion = changegroup.safeversion(repo) |
26425
eb21b6679dc6
strip: compress bundle2 backup using BZ
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26423
diff
changeset
|
41 comp = None |
26423
c93f91c1db1c
strip: use bundle2 + cg2 by default when repository use general delta
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26014
diff
changeset
|
42 if cgversion != '01': |
24686
e0e28e910fa3
bundle2: rename format, parts and config to final names
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24252
diff
changeset
|
43 bundletype = "HG20" |
26425
eb21b6679dc6
strip: compress bundle2 backup using BZ
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26423
diff
changeset
|
44 if compress: |
eb21b6679dc6
strip: compress bundle2 backup using BZ
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26423
diff
changeset
|
45 comp = 'BZ' |
23898
b21c2e0ee8a3
repair: add experimental option to write bundle2 files
Eric Sumner <ericsumner@fb.com>
parents:
23895
diff
changeset
|
46 elif compress: |
11791
00cde9bddbe4
repair: do not compress partial bundle if we do not keep it on disk
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11600
diff
changeset
|
47 bundletype = "HG10BZ" |
00cde9bddbe4
repair: do not compress partial bundle if we do not keep it on disk
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11600
diff
changeset
|
48 else: |
00cde9bddbe4
repair: do not compress partial bundle if we do not keep it on disk
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
11600
diff
changeset
|
49 bundletype = "HG10UN" |
32468
4c4d91908492
strip: use the 'writenewbundle' function to get bundle on disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32296
diff
changeset
|
50 |
4c4d91908492
strip: use the 'writenewbundle' function to get bundle on disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32296
diff
changeset
|
51 outgoing = discovery.outgoing(repo, missingroots=bases, missingheads=heads) |
32628
5732e6d2b369
strip: do not include obsolescence markers for the temporary bundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32623
diff
changeset
|
52 contentopts = {'cg.version': cgversion, 'obsolescence': obsolescence} |
32468
4c4d91908492
strip: use the 'writenewbundle' function to get bundle on disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32296
diff
changeset
|
53 return bundle2.writenewbundle(repo.ui, repo, 'strip', name, bundletype, |
4c4d91908492
strip: use the 'writenewbundle' function to get bundle on disk
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32296
diff
changeset
|
54 outgoing, contentopts, vfs, compression=comp) |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
55 |
5910
b9a830fa10f6
simplify revlog.strip interface and callers; add docstring
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5909
diff
changeset
|
56 def _collectfiles(repo, striprev): |
b9a830fa10f6
simplify revlog.strip interface and callers; add docstring
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5909
diff
changeset
|
57 """find out the filelogs affected by the strip""" |
8462
e7e4e41b3bbc
repair: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8363
diff
changeset
|
58 files = set() |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
59 |
6750
fb42030d79d6
add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents:
6747
diff
changeset
|
60 for x in xrange(striprev, len(repo)): |
8479
3e16c0fc2241
repair: bulk update sets
Martin Geisler <mg@lazybytes.net>
parents:
8462
diff
changeset
|
61 files.update(repo[x].files()) |
5902
98f8dec8f437
repair.py: split stripall into two functions; clean it up a bit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5901
diff
changeset
|
62 |
8462
e7e4e41b3bbc
repair: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8363
diff
changeset
|
63 return sorted(files) |
5902
98f8dec8f437
repair.py: split stripall into two functions; clean it up a bit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5901
diff
changeset
|
64 |
13702
ffd370aa050b
strip: remove usage of extranodes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13362
diff
changeset
|
65 def _collectbrokencsets(repo, files, striprev): |
ffd370aa050b
strip: remove usage of extranodes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13362
diff
changeset
|
66 """return the changesets which will be broken by the truncation""" |
13705
73cfb7a5aa56
strip: simplify collectone
Matt Mackall <mpm@selenic.com>
parents:
13702
diff
changeset
|
67 s = set() |
13702
ffd370aa050b
strip: remove usage of extranodes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13362
diff
changeset
|
68 def collectone(revlog): |
20074
5fc2ae1c631b
strip: add faster revlog strip computation
Durham Goode <durham@fb.com>
parents:
18766
diff
changeset
|
69 _, brokenset = revlog.getstrippoint(striprev) |
5fc2ae1c631b
strip: add faster revlog strip computation
Durham Goode <durham@fb.com>
parents:
18766
diff
changeset
|
70 s.update([revlog.linkrev(r) for r in brokenset]) |
5909
f45f7390c1c5
strip: calculate list of extra nodes to save and pass it to changegroupsubset
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5905
diff
changeset
|
71 |
30375
11b8b740d54a
manifest: remove last uses of repo.manifest
Durham Goode <durham@fb.com>
parents:
30371
diff
changeset
|
72 collectone(repo.manifestlog._revlog) |
13705
73cfb7a5aa56
strip: simplify collectone
Matt Mackall <mpm@selenic.com>
parents:
13702
diff
changeset
|
73 for fname in files: |
73cfb7a5aa56
strip: simplify collectone
Matt Mackall <mpm@selenic.com>
parents:
13702
diff
changeset
|
74 collectone(repo.file(fname)) |
5909
f45f7390c1c5
strip: calculate list of extra nodes to save and pass it to changegroupsubset
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5905
diff
changeset
|
75 |
13705
73cfb7a5aa56
strip: simplify collectone
Matt Mackall <mpm@selenic.com>
parents:
13702
diff
changeset
|
76 return s |
5909
f45f7390c1c5
strip: calculate list of extra nodes to save and pass it to changegroupsubset
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5905
diff
changeset
|
77 |
22057
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21064
diff
changeset
|
78 def strip(ui, repo, nodelist, backup=True, topic='backup'): |
27553
56caab876bd8
repair: improves documentation of strip regarding locks
Laurent Charignon <lcharignon@fb.com>
parents:
27157
diff
changeset
|
79 # This function operates within a transaction of its own, but does |
56caab876bd8
repair: improves documentation of strip regarding locks
Laurent Charignon <lcharignon@fb.com>
parents:
27157
diff
changeset
|
80 # not take any lock on the repo. |
22057
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21064
diff
changeset
|
81 # Simple way to maintain backwards compatibility for this |
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21064
diff
changeset
|
82 # argument. |
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21064
diff
changeset
|
83 if backup in ['none', 'strip']: |
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21064
diff
changeset
|
84 backup = False |
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21064
diff
changeset
|
85 |
18004
747a2f43d5d9
clfilter: strip logic should be unfiltered
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
17922
diff
changeset
|
86 repo = repo.unfiltered() |
18310
4499ba5ac35c
localrepo: introduce destroying function
Idan Kamara <idankk86@gmail.com>
parents:
18121
diff
changeset
|
87 repo.destroying() |
17013
c8eda7bbdcab
strip: incrementally update the branchheads cache after a strip
Joshua Redstone <joshua.redstone@fb.com>
parents:
16867
diff
changeset
|
88 |
5901
16f4129c19ac
repair.py: rename chlog to cl
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5900
diff
changeset
|
89 cl = repo.changelog |
16237
b5c0c7d0f83f
repair: remove undo files after strip
Idan Kamara <idankk86@gmail.com>
parents:
15901
diff
changeset
|
90 # TODO handle undo of merge sets |
16252
cf17e76be4dd
strip: enhance repair.strip to receive a list of nodes (issue3299)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15901
diff
changeset
|
91 if isinstance(nodelist, str): |
cf17e76be4dd
strip: enhance repair.strip to receive a list of nodes (issue3299)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15901
diff
changeset
|
92 nodelist = [nodelist] |
cf17e76be4dd
strip: enhance repair.strip to receive a list of nodes (issue3299)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15901
diff
changeset
|
93 striplist = [cl.rev(node) for node in nodelist] |
cf17e76be4dd
strip: enhance repair.strip to receive a list of nodes (issue3299)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15901
diff
changeset
|
94 striprev = min(striplist) |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
95 |
30707
987dbe87aad6
repair: combine two loops over changelog revisions
Martin von Zweigbergk <martinvonz@google.com>
parents:
30706
diff
changeset
|
96 files = _collectfiles(repo, striprev) |
987dbe87aad6
repair: combine two loops over changelog revisions
Martin von Zweigbergk <martinvonz@google.com>
parents:
30706
diff
changeset
|
97 saverevs = _collectbrokencsets(repo, files, striprev) |
987dbe87aad6
repair: combine two loops over changelog revisions
Martin von Zweigbergk <martinvonz@google.com>
parents:
30706
diff
changeset
|
98 |
6147
53ae5af55db3
repair.py: rewrite a loop, making it cleaner and faster
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5910
diff
changeset
|
99 # Some revisions with rev > striprev may not be descendants of striprev. |
53ae5af55db3
repair.py: rewrite a loop, making it cleaner and faster
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5910
diff
changeset
|
100 # We have to find these revisions and put them in a bundle, so that |
53ae5af55db3
repair.py: rewrite a loop, making it cleaner and faster
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5910
diff
changeset
|
101 # we can restore them after the truncations. |
53ae5af55db3
repair.py: rewrite a loop, making it cleaner and faster
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5910
diff
changeset
|
102 # To create the bundle we use repo.changegroupsubset which requires |
53ae5af55db3
repair.py: rewrite a loop, making it cleaner and faster
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5910
diff
changeset
|
103 # the list of heads and bases of the set of interesting revisions. |
53ae5af55db3
repair.py: rewrite a loop, making it cleaner and faster
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5910
diff
changeset
|
104 # (head = revision in the set that has no descendant in the set; |
53ae5af55db3
repair.py: rewrite a loop, making it cleaner and faster
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5910
diff
changeset
|
105 # base = revision in the set that has no ancestor in the set) |
16252
cf17e76be4dd
strip: enhance repair.strip to receive a list of nodes (issue3299)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15901
diff
changeset
|
106 tostrip = set(striplist) |
30707
987dbe87aad6
repair: combine two loops over changelog revisions
Martin von Zweigbergk <martinvonz@google.com>
parents:
30706
diff
changeset
|
107 saveheads = set(saverevs) |
30706
2e4862646f02
repair: speed up stripping of many roots
Martin von Zweigbergk <martinvonz@google.com>
parents:
30375
diff
changeset
|
108 for r in cl.revs(start=striprev + 1): |
2e4862646f02
repair: speed up stripping of many roots
Martin von Zweigbergk <martinvonz@google.com>
parents:
30375
diff
changeset
|
109 if any(p in tostrip for p in cl.parentrevs(r)): |
2e4862646f02
repair: speed up stripping of many roots
Martin von Zweigbergk <martinvonz@google.com>
parents:
30375
diff
changeset
|
110 tostrip.add(r) |
13702
ffd370aa050b
strip: remove usage of extranodes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13362
diff
changeset
|
111 |
ffd370aa050b
strip: remove usage of extranodes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13362
diff
changeset
|
112 if r not in tostrip: |
ffd370aa050b
strip: remove usage of extranodes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13362
diff
changeset
|
113 saverevs.add(r) |
ffd370aa050b
strip: remove usage of extranodes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13362
diff
changeset
|
114 saveheads.difference_update(cl.parentrevs(r)) |
ffd370aa050b
strip: remove usage of extranodes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13362
diff
changeset
|
115 saveheads.add(r) |
ffd370aa050b
strip: remove usage of extranodes
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
13362
diff
changeset
|
116 saveheads = [cl.node(r) for r in saveheads] |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
117 |
15386
6051d8e7e133
strip: backout 73307643a09f (issue3077)
Matt Mackall <mpm@selenic.com>
parents:
15068
diff
changeset
|
118 # compute base nodes |
6051d8e7e133
strip: backout 73307643a09f (issue3077)
Matt Mackall <mpm@selenic.com>
parents:
15068
diff
changeset
|
119 if saverevs: |
16867
1093ad1e8903
revlog: descendants(*revs) becomes descendants(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16745
diff
changeset
|
120 descendants = set(cl.descendants(saverevs)) |
15386
6051d8e7e133
strip: backout 73307643a09f (issue3077)
Matt Mackall <mpm@selenic.com>
parents:
15068
diff
changeset
|
121 saverevs.difference_update(descendants) |
6051d8e7e133
strip: backout 73307643a09f (issue3077)
Matt Mackall <mpm@selenic.com>
parents:
15068
diff
changeset
|
122 savebases = [cl.node(r) for r in saverevs] |
16252
cf17e76be4dd
strip: enhance repair.strip to receive a list of nodes (issue3299)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15901
diff
changeset
|
123 stripbases = [cl.node(r) for r in tostrip] |
18040
fe8caf28d580
strip: make query to get new bookmark target cheaper
Siddharth Agarwal <sid0@fb.com>
parents:
18004
diff
changeset
|
124 |
32629
71eb6a098315
strip: strip obsmarkers exclusive to the stripped changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32628
diff
changeset
|
125 stripobsidx = obsmarkers = () |
71eb6a098315
strip: strip obsmarkers exclusive to the stripped changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32628
diff
changeset
|
126 if repo.ui.configbool('devel', 'strip-obsmarkers', True): |
71eb6a098315
strip: strip obsmarkers exclusive to the stripped changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32628
diff
changeset
|
127 obsmarkers = obsolete.exclusivemarkers(repo, stripbases) |
71eb6a098315
strip: strip obsmarkers exclusive to the stripped changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32628
diff
changeset
|
128 if obsmarkers: |
71eb6a098315
strip: strip obsmarkers exclusive to the stripped changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32628
diff
changeset
|
129 stripobsidx = [i for i, m in enumerate(repo.obsstore) |
71eb6a098315
strip: strip obsmarkers exclusive to the stripped changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32628
diff
changeset
|
130 if m in obsmarkers] |
71eb6a098315
strip: strip obsmarkers exclusive to the stripped changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32628
diff
changeset
|
131 |
18040
fe8caf28d580
strip: make query to get new bookmark target cheaper
Siddharth Agarwal <sid0@fb.com>
parents:
18004
diff
changeset
|
132 # For a set s, max(parents(s) - s) is the same as max(heads(::s - s)), but |
fe8caf28d580
strip: make query to get new bookmark target cheaper
Siddharth Agarwal <sid0@fb.com>
parents:
18004
diff
changeset
|
133 # is much faster |
fe8caf28d580
strip: make query to get new bookmark target cheaper
Siddharth Agarwal <sid0@fb.com>
parents:
18004
diff
changeset
|
134 newbmtarget = repo.revs('max(parents(%ld) - (%ld))', tostrip, tostrip) |
17264
ec7b9bec19c9
strip: move bookmarks to nearest ancestor rather than '.'
Augie Fackler <raf@durin42.com>
parents:
17013
diff
changeset
|
135 if newbmtarget: |
22818
d7b114493315
repair: use `first` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22057
diff
changeset
|
136 newbmtarget = repo[newbmtarget.first()].node() |
17264
ec7b9bec19c9
strip: move bookmarks to nearest ancestor rather than '.'
Augie Fackler <raf@durin42.com>
parents:
17013
diff
changeset
|
137 else: |
ec7b9bec19c9
strip: move bookmarks to nearest ancestor rather than '.'
Augie Fackler <raf@durin42.com>
parents:
17013
diff
changeset
|
138 newbmtarget = '.' |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
139 |
13362
ee01d9d84115
bookmarks: move strip support to repair
Matt Mackall <mpm@selenic.com>
parents:
12057
diff
changeset
|
140 bm = repo._bookmarks |
ee01d9d84115
bookmarks: move strip support to repair
Matt Mackall <mpm@selenic.com>
parents:
12057
diff
changeset
|
141 updatebm = [] |
ee01d9d84115
bookmarks: move strip support to repair
Matt Mackall <mpm@selenic.com>
parents:
12057
diff
changeset
|
142 for m in bm: |
ee01d9d84115
bookmarks: move strip support to repair
Matt Mackall <mpm@selenic.com>
parents:
12057
diff
changeset
|
143 rev = repo[bm[m]].rev() |
ee01d9d84115
bookmarks: move strip support to repair
Matt Mackall <mpm@selenic.com>
parents:
12057
diff
changeset
|
144 if rev in tostrip: |
ee01d9d84115
bookmarks: move strip support to repair
Matt Mackall <mpm@selenic.com>
parents:
12057
diff
changeset
|
145 updatebm.append(m) |
ee01d9d84115
bookmarks: move strip support to repair
Matt Mackall <mpm@selenic.com>
parents:
12057
diff
changeset
|
146 |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
147 # create a changegroup for all the branches we need to keep |
11197
4bb4895e1693
strip: be quiet about temporary internal bundle
Matt Mackall <mpm@selenic.com>
parents:
10881
diff
changeset
|
148 backupfile = None |
20979
ad5b61370514
repair: make "strip()" treat bundle files via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20977
diff
changeset
|
149 vfs = repo.vfs |
24252
f962692853c0
repair: define explicit local variable, don't reuse a comprehension variable
Mike Edgar <adgar@google.com>
parents:
24170
diff
changeset
|
150 node = nodelist[-1] |
22057
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21064
diff
changeset
|
151 if backup: |
16388
e03d8a40521f
repair: allow giving strip backup a different name
Idan Kamara <idankk86@gmail.com>
parents:
16253
diff
changeset
|
152 backupfile = _bundle(repo, stripbases, cl.heads(), node, topic) |
20979
ad5b61370514
repair: make "strip()" treat bundle files via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20977
diff
changeset
|
153 repo.ui.status(_("saved backup bundle to %s\n") % |
ad5b61370514
repair: make "strip()" treat bundle files via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20977
diff
changeset
|
154 vfs.join(backupfile)) |
ad5b61370514
repair: make "strip()" treat bundle files via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20977
diff
changeset
|
155 repo.ui.log("backupbundle", "saved backup bundle to %s\n", |
ad5b61370514
repair: make "strip()" treat bundle files via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20977
diff
changeset
|
156 vfs.join(backupfile)) |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
157 tmpbundlefile = None |
29951
e7acbe538baf
strip: simplify some repeated conditions
Martin von Zweigbergk <martinvonz@google.com>
parents:
29708
diff
changeset
|
158 if saveheads: |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
159 # do not compress temporary bundle if we remove it from disk later |
32628
5732e6d2b369
strip: do not include obsolescence markers for the temporary bundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32623
diff
changeset
|
160 # |
5732e6d2b369
strip: do not include obsolescence markers for the temporary bundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32623
diff
changeset
|
161 # We do not include obsolescence, it might re-introduce prune markers |
5732e6d2b369
strip: do not include obsolescence markers for the temporary bundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32623
diff
changeset
|
162 # we are trying to strip. This is harmless since the stripped markers |
5732e6d2b369
strip: do not include obsolescence markers for the temporary bundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32623
diff
changeset
|
163 # are already backed up and we did not touched the markers for the |
5732e6d2b369
strip: do not include obsolescence markers for the temporary bundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32623
diff
changeset
|
164 # saved changesets. |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
165 tmpbundlefile = _bundle(repo, savebases, saveheads, node, 'temp', |
32628
5732e6d2b369
strip: do not include obsolescence markers for the temporary bundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32623
diff
changeset
|
166 compress=False, obsolescence=False) |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
167 |
30375
11b8b740d54a
manifest: remove last uses of repo.manifest
Durham Goode <durham@fb.com>
parents:
30371
diff
changeset
|
168 mfst = repo.manifestlog._revlog |
8073
e8a28556a0a8
strip: make repair.strip transactional to avoid repository corruption
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7361
diff
changeset
|
169 |
25300
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24863
diff
changeset
|
170 curtr = repo.currenttransaction() |
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24863
diff
changeset
|
171 if curtr is not None: |
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24863
diff
changeset
|
172 del curtr # avoid carrying reference to transaction for nothing |
31645 | 173 raise error.ProgrammingError('cannot strip from inside a transaction') |
25300
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24863
diff
changeset
|
174 |
27873
60ea60fea5f3
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27871
diff
changeset
|
175 try: |
60ea60fea5f3
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27871
diff
changeset
|
176 with repo.transaction("strip") as tr: |
60ea60fea5f3
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27871
diff
changeset
|
177 offset = len(tr.entries) |
8073
e8a28556a0a8
strip: make repair.strip transactional to avoid repository corruption
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7361
diff
changeset
|
178 |
27873
60ea60fea5f3
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27871
diff
changeset
|
179 tr.startgroup() |
60ea60fea5f3
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27871
diff
changeset
|
180 cl.strip(striprev, tr) |
60ea60fea5f3
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27871
diff
changeset
|
181 mfst.strip(striprev, tr) |
32196
a2be2abe9476
strip: move tree strip logic to it's own function
Durham Goode <durham@fb.com>
parents:
31875
diff
changeset
|
182 striptrees(repo, tr, striprev, files) |
a2be2abe9476
strip: move tree strip logic to it's own function
Durham Goode <durham@fb.com>
parents:
31875
diff
changeset
|
183 |
27873
60ea60fea5f3
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27871
diff
changeset
|
184 for fn in files: |
60ea60fea5f3
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27871
diff
changeset
|
185 repo.file(fn).strip(striprev, tr) |
60ea60fea5f3
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27871
diff
changeset
|
186 tr.endgroup() |
8073
e8a28556a0a8
strip: make repair.strip transactional to avoid repository corruption
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7361
diff
changeset
|
187 |
11197
4bb4895e1693
strip: be quiet about temporary internal bundle
Matt Mackall <mpm@selenic.com>
parents:
10881
diff
changeset
|
188 for i in xrange(offset, len(tr.entries)): |
4bb4895e1693
strip: be quiet about temporary internal bundle
Matt Mackall <mpm@selenic.com>
parents:
10881
diff
changeset
|
189 file, troffset, ignore = tr.entries[i] |
30001
e38d85be978f
repair: open a file with checkambig=True to avoid file stat ambiguity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29954
diff
changeset
|
190 with repo.svfs(file, 'a', checkambig=True) as fp: |
e38d85be978f
repair: open a file with checkambig=True to avoid file stat ambiguity
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29954
diff
changeset
|
191 fp.truncate(troffset) |
20885
f49d60fa40a5
fncache: clean up fncache during strips
Durham Goode <durham@fb.com>
parents:
20074
diff
changeset
|
192 if troffset == 0: |
f49d60fa40a5
fncache: clean up fncache during strips
Durham Goode <durham@fb.com>
parents:
20074
diff
changeset
|
193 repo.store.markremoved(file) |
11197
4bb4895e1693
strip: be quiet about temporary internal bundle
Matt Mackall <mpm@selenic.com>
parents:
10881
diff
changeset
|
194 |
32629
71eb6a098315
strip: strip obsmarkers exclusive to the stripped changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32628
diff
changeset
|
195 deleteobsmarkers(repo.obsstore, stripobsidx) |
71eb6a098315
strip: strip obsmarkers exclusive to the stripped changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32628
diff
changeset
|
196 del repo.obsstore |
71eb6a098315
strip: strip obsmarkers exclusive to the stripped changeset
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32628
diff
changeset
|
197 |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
198 if tmpbundlefile: |
11202
f974fe896921
strip: hide unbundle messages by default
Matt Mackall <mpm@selenic.com>
parents:
11200
diff
changeset
|
199 ui.note(_("adding branch\n")) |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
200 f = vfs.open(tmpbundlefile, "rb") |
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
201 gen = exchange.readbundle(ui, f, tmpbundlefile, vfs) |
11202
f974fe896921
strip: hide unbundle messages by default
Matt Mackall <mpm@selenic.com>
parents:
11200
diff
changeset
|
202 if not repo.ui.verbose: |
f974fe896921
strip: hide unbundle messages by default
Matt Mackall <mpm@selenic.com>
parents:
11200
diff
changeset
|
203 # silence internal shuffling chatter |
f974fe896921
strip: hide unbundle messages by default
Matt Mackall <mpm@selenic.com>
parents:
11200
diff
changeset
|
204 repo.ui.pushbuffer() |
23898
b21c2e0ee8a3
repair: add experimental option to write bundle2 files
Eric Sumner <ericsumner@fb.com>
parents:
23895
diff
changeset
|
205 if isinstance(gen, bundle2.unbundle20): |
27875
add2ba16430e
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27873
diff
changeset
|
206 with repo.transaction('strip') as tr: |
add2ba16430e
with: use context manager for transaction in strip
Bryan O'Sullivan <bryano@fb.com>
parents:
27873
diff
changeset
|
207 tr.hookargs = {'source': 'strip', |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
208 'url': 'bundle:' + vfs.join(tmpbundlefile)} |
26797
75d550b7d8f5
strip: pass source and url to bundle2 processing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26701
diff
changeset
|
209 bundle2.applybundle(repo, gen, tr, source='strip', |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
210 url='bundle:' + vfs.join(tmpbundlefile)) |
23898
b21c2e0ee8a3
repair: add experimental option to write bundle2 files
Eric Sumner <ericsumner@fb.com>
parents:
23895
diff
changeset
|
211 else: |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
212 gen.apply(repo, 'strip', 'bundle:' + vfs.join(tmpbundlefile), |
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
213 True) |
11202
f974fe896921
strip: hide unbundle messages by default
Matt Mackall <mpm@selenic.com>
parents:
11200
diff
changeset
|
214 if not repo.ui.verbose: |
f974fe896921
strip: hide unbundle messages by default
Matt Mackall <mpm@selenic.com>
parents:
11200
diff
changeset
|
215 repo.ui.popbuffer() |
11197
4bb4895e1693
strip: be quiet about temporary internal bundle
Matt Mackall <mpm@selenic.com>
parents:
10881
diff
changeset
|
216 f.close() |
29196
bf7b8157c483
strip: invalidate phase cache after stripping changeset (issue5235)
Laurent Charignon <lcharignon@fb.com>
parents:
28868
diff
changeset
|
217 repo._phasecache.invalidate() |
13362
ee01d9d84115
bookmarks: move strip support to repair
Matt Mackall <mpm@selenic.com>
parents:
12057
diff
changeset
|
218 |
27157
5f2e4eb08e41
repair: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26797
diff
changeset
|
219 for m in updatebm: |
5f2e4eb08e41
repair: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26797
diff
changeset
|
220 bm[m] = repo[newbmtarget].node() |
31626
0febf8e4e2ce
repair: use context manager for lock management
Matt Harbison <matt_harbison@yahoo.com>
parents:
31324
diff
changeset
|
221 |
0febf8e4e2ce
repair: use context manager for lock management
Matt Harbison <matt_harbison@yahoo.com>
parents:
31324
diff
changeset
|
222 with repo.lock(): |
0febf8e4e2ce
repair: use context manager for lock management
Matt Harbison <matt_harbison@yahoo.com>
parents:
31324
diff
changeset
|
223 with repo.transaction('repair') as tr: |
0febf8e4e2ce
repair: use context manager for lock management
Matt Harbison <matt_harbison@yahoo.com>
parents:
31324
diff
changeset
|
224 bm.recordchange(tr) |
27157
5f2e4eb08e41
repair: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
26797
diff
changeset
|
225 |
16237
b5c0c7d0f83f
repair: remove undo files after strip
Idan Kamara <idankk86@gmail.com>
parents:
15901
diff
changeset
|
226 # remove undo files |
20975
37cdf1fca1b2
localrepo: make "undofiles()" return list of tuples "(vfs, relative filename)"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20933
diff
changeset
|
227 for undovfs, undofile in repo.undofiles(): |
16237
b5c0c7d0f83f
repair: remove undo files after strip
Idan Kamara <idankk86@gmail.com>
parents:
15901
diff
changeset
|
228 try: |
20975
37cdf1fca1b2
localrepo: make "undofiles()" return list of tuples "(vfs, relative filename)"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20933
diff
changeset
|
229 undovfs.unlink(undofile) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25652
diff
changeset
|
230 except OSError as e: |
16237
b5c0c7d0f83f
repair: remove undo files after strip
Idan Kamara <idankk86@gmail.com>
parents:
15901
diff
changeset
|
231 if e.errno != errno.ENOENT: |
20975
37cdf1fca1b2
localrepo: make "undofiles()" return list of tuples "(vfs, relative filename)"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20933
diff
changeset
|
232 ui.warn(_('error removing %s: %s\n') % |
37cdf1fca1b2
localrepo: make "undofiles()" return list of tuples "(vfs, relative filename)"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20933
diff
changeset
|
233 (undovfs.join(undofile), str(e))) |
16237
b5c0c7d0f83f
repair: remove undo files after strip
Idan Kamara <idankk86@gmail.com>
parents:
15901
diff
changeset
|
234 |
16705
c2d9ef43ff6c
check-code: ignore naked excepts with a "re-raise" comment
Brodie Rao <brodie@sf.io>
parents:
16628
diff
changeset
|
235 except: # re-raises |
11197
4bb4895e1693
strip: be quiet about temporary internal bundle
Matt Mackall <mpm@selenic.com>
parents:
10881
diff
changeset
|
236 if backupfile: |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
237 ui.warn(_("strip failed, backup bundle stored in '%s'\n") |
20979
ad5b61370514
repair: make "strip()" treat bundle files via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20977
diff
changeset
|
238 % vfs.join(backupfile)) |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
239 if tmpbundlefile: |
29953
94ebf56db04e
strip: clarify that user action is required to recover temp bundle
Martin von Zweigbergk <martinvonz@google.com>
parents:
29952
diff
changeset
|
240 ui.warn(_("strip failed, unrecovered changes stored in '%s'\n") |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
241 % vfs.join(tmpbundlefile)) |
29953
94ebf56db04e
strip: clarify that user action is required to recover temp bundle
Martin von Zweigbergk <martinvonz@google.com>
parents:
29952
diff
changeset
|
242 ui.warn(_("(fix the problem, then recover the changesets with " |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
243 "\"hg unbundle '%s'\")\n") % vfs.join(tmpbundlefile)) |
8073
e8a28556a0a8
strip: make repair.strip transactional to avoid repository corruption
Henrik Stuart <henrik.stuart@edlund.dk>
parents:
7361
diff
changeset
|
244 raise |
22057
445472225ccd
strip: remove -b/--backup codepaths
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
21064
diff
changeset
|
245 else: |
29954
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
246 if tmpbundlefile: |
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
247 # Remove temporary bundle only if there were no exceptions |
769aee32fae0
strip: don't use "full" and "partial" to describe bundles
Martin von Zweigbergk <martinvonz@google.com>
parents:
29953
diff
changeset
|
248 vfs.unlink(tmpbundlefile) |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
249 |
18395
904b7109938e
destroyed: drop complex branchcache rebuilt logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18311
diff
changeset
|
250 repo.destroyed() |
30274
c1345969f6c5
repair: make strip() return backup file path
Martin von Zweigbergk <martinvonz@google.com>
parents:
30001
diff
changeset
|
251 # return the backup file path (or None if 'backup' was False) so |
c1345969f6c5
repair: make strip() return backup file path
Martin von Zweigbergk <martinvonz@google.com>
parents:
30001
diff
changeset
|
252 # extensions can use it |
c1345969f6c5
repair: make strip() return backup file path
Martin von Zweigbergk <martinvonz@google.com>
parents:
30001
diff
changeset
|
253 return backupfile |
25652
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
254 |
32196
a2be2abe9476
strip: move tree strip logic to it's own function
Durham Goode <durham@fb.com>
parents:
31875
diff
changeset
|
255 def striptrees(repo, tr, striprev, files): |
a2be2abe9476
strip: move tree strip logic to it's own function
Durham Goode <durham@fb.com>
parents:
31875
diff
changeset
|
256 if 'treemanifest' in repo.requirements: # safe but unnecessary |
a2be2abe9476
strip: move tree strip logic to it's own function
Durham Goode <durham@fb.com>
parents:
31875
diff
changeset
|
257 # otherwise |
32296
7e07d5836063
hg: backout optimizing for treemanifests
Durham Goode <durham@fb.com>
parents:
32197
diff
changeset
|
258 for unencoded, encoded, size in repo.store.datafiles(): |
7e07d5836063
hg: backout optimizing for treemanifests
Durham Goode <durham@fb.com>
parents:
32197
diff
changeset
|
259 if (unencoded.startswith('meta/') and |
7e07d5836063
hg: backout optimizing for treemanifests
Durham Goode <durham@fb.com>
parents:
32197
diff
changeset
|
260 unencoded.endswith('00manifest.i')): |
7e07d5836063
hg: backout optimizing for treemanifests
Durham Goode <durham@fb.com>
parents:
32197
diff
changeset
|
261 dir = unencoded[5:-12] |
7e07d5836063
hg: backout optimizing for treemanifests
Durham Goode <durham@fb.com>
parents:
32197
diff
changeset
|
262 repo.manifestlog._revlog.dirlog(dir).strip(striprev, tr) |
32196
a2be2abe9476
strip: move tree strip logic to it's own function
Durham Goode <durham@fb.com>
parents:
31875
diff
changeset
|
263 |
25652
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
264 def rebuildfncache(ui, repo): |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
265 """Rebuilds the fncache file from repo history. |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
266 |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
267 Missing entries will be added. Extra entries will be removed. |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
268 """ |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
269 repo = repo.unfiltered() |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
270 |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
271 if 'fncache' not in repo.requirements: |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
272 ui.warn(_('(not rebuilding fncache because repository does not ' |
25874
3e84f40232c7
repair: fix typo in warning message
Wagner Bruna <wbruna@yahoo.com>
parents:
25845
diff
changeset
|
273 'support fncache)\n')) |
25652
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
274 return |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
275 |
27860
0da102e4f203
with: use context manager in rebuildfncache again
Bryan O'Sullivan <bryano@fb.com>
parents:
27553
diff
changeset
|
276 with repo.lock(): |
25652
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
277 fnc = repo.store.fncache |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
278 # Trigger load of fncache. |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
279 if 'irrelevant' in fnc: |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
280 pass |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
281 |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
282 oldentries = set(fnc.entries) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
283 newentries = set() |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
284 seenfiles = set() |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
285 |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
286 repolen = len(repo) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
287 for rev in repo: |
28466
c7d45c5a8cea
repair: specify unit for ui.progress in rebuildfncache()
Anton Shestakov <av6@dwimlabs.net>
parents:
28465
diff
changeset
|
288 ui.progress(_('rebuilding'), rev, total=repolen, |
c7d45c5a8cea
repair: specify unit for ui.progress in rebuildfncache()
Anton Shestakov <av6@dwimlabs.net>
parents:
28465
diff
changeset
|
289 unit=_('changesets')) |
25652
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
290 |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
291 ctx = repo[rev] |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
292 for f in ctx.files(): |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
293 # This is to minimize I/O. |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
294 if f in seenfiles: |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
295 continue |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
296 seenfiles.add(f) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
297 |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
298 i = 'data/%s.i' % f |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
299 d = 'data/%s.d' % f |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
300 |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
301 if repo.store._exists(i): |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
302 newentries.add(i) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
303 if repo.store._exists(d): |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
304 newentries.add(d) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
305 |
28465
43eb31ea2dcb
repair: use 'rebuilding' progress topic in rebuildfncache()
Anton Shestakov <av6@dwimlabs.net>
parents:
28031
diff
changeset
|
306 ui.progress(_('rebuilding'), None) |
25652
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
307 |
28031
6f248ba85309
treemanifest: fix debugrebuildfncache
Martin von Zweigbergk <martinvonz@google.com>
parents:
28007
diff
changeset
|
308 if 'treemanifest' in repo.requirements: # safe but unnecessary otherwise |
28007
fb92927f9775
treemanifests: fix streaming clone
Martin von Zweigbergk <martinvonz@google.com>
parents:
27930
diff
changeset
|
309 for dir in util.dirs(seenfiles): |
fb92927f9775
treemanifests: fix streaming clone
Martin von Zweigbergk <martinvonz@google.com>
parents:
27930
diff
changeset
|
310 i = 'meta/%s/00manifest.i' % dir |
fb92927f9775
treemanifests: fix streaming clone
Martin von Zweigbergk <martinvonz@google.com>
parents:
27930
diff
changeset
|
311 d = 'meta/%s/00manifest.d' % dir |
fb92927f9775
treemanifests: fix streaming clone
Martin von Zweigbergk <martinvonz@google.com>
parents:
27930
diff
changeset
|
312 |
fb92927f9775
treemanifests: fix streaming clone
Martin von Zweigbergk <martinvonz@google.com>
parents:
27930
diff
changeset
|
313 if repo.store._exists(i): |
fb92927f9775
treemanifests: fix streaming clone
Martin von Zweigbergk <martinvonz@google.com>
parents:
27930
diff
changeset
|
314 newentries.add(i) |
fb92927f9775
treemanifests: fix streaming clone
Martin von Zweigbergk <martinvonz@google.com>
parents:
27930
diff
changeset
|
315 if repo.store._exists(d): |
fb92927f9775
treemanifests: fix streaming clone
Martin von Zweigbergk <martinvonz@google.com>
parents:
27930
diff
changeset
|
316 newentries.add(d) |
fb92927f9775
treemanifests: fix streaming clone
Martin von Zweigbergk <martinvonz@google.com>
parents:
27930
diff
changeset
|
317 |
25652
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
318 addcount = len(newentries - oldentries) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
319 removecount = len(oldentries - newentries) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
320 for p in sorted(oldentries - newentries): |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
321 ui.write(_('removing %s\n') % p) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
322 for p in sorted(newentries - oldentries): |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
323 ui.write(_('adding %s\n') % p) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
324 |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
325 if addcount or removecount: |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
326 ui.write(_('%d items added, %d removed from fncache\n') % |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
327 (addcount, removecount)) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
328 fnc.entries = newentries |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
329 fnc._dirty = True |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
330 |
27871
f1c316fd91f9
with: use context manager in rebuildfncache
Bryan O'Sullivan <bryano@fb.com>
parents:
27860
diff
changeset
|
331 with repo.transaction('fncache') as tr: |
25652
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
332 fnc.write(tr) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
333 else: |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
334 ui.write(_('fncache already up to date\n')) |
2882d6886919
repair: add functionality to rebuild fncache
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25404
diff
changeset
|
335 |
26624
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
336 def stripbmrevset(repo, mark): |
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
337 """ |
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
338 The revset to strip when strip is called with -B mark |
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
339 |
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
340 Needs to live here so extensions can use it and wrap it even when strip is |
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
341 not enabled or not present on a box. |
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
342 """ |
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
343 return repo.revs("ancestors(bookmark(%s)) - " |
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
344 "ancestors(head() and not bookmark(%s)) - " |
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
345 "ancestors(bookmark() and not bookmark(%s))", |
bcace0fbb4c8
strip: factor out revset calculation for strip -B
Ryan McElroy <rmcelroy@fb.com>
parents:
26587
diff
changeset
|
346 mark, mark, mark) |
28868
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
347 |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
348 def deleteobsmarkers(obsstore, indices): |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
349 """Delete some obsmarkers from obsstore and return how many were deleted |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
350 |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
351 'indices' is a list of ints which are the indices |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
352 of the markers to be deleted. |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
353 |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
354 Every invocation of this function completely rewrites the obsstore file, |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
355 skipping the markers we want to be removed. The new temporary file is |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
356 created, remaining markers are written there and on .close() this file |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
357 gets atomically renamed to obsstore, thus guaranteeing consistency.""" |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
358 if not indices: |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
359 # we don't want to rewrite the obsstore with the same content |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
360 return |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
361 |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
362 left = [] |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
363 current = obsstore._all |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
364 n = 0 |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
365 for i, m in enumerate(current): |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
366 if i in indices: |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
367 n += 1 |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
368 continue |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
369 left.append(m) |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
370 |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
371 newobsstorefile = obsstore.svfs('obsstore', 'w', atomictemp=True) |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
372 for bytes in obsolete.encodemarkers(left, True, obsstore._version): |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
373 newobsstorefile.write(bytes) |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
374 newobsstorefile.close() |
445a25bb70be
obsstore: move delete function from obsstore class to repair module
Kostia Balytskyi <ikostia@fb.com>
parents:
28666
diff
changeset
|
375 return n |