contrib/convert-repo
author Mads Kiilerich <madski@unity3d.com>
Mon, 28 Jan 2013 15:19:44 +0100
branchstable
changeset 18488 a977b42df8b3
parent 6365 1d3eb332f3cb
permissions -rwxr-xr-x
largefiles: don't verify largefile hashes on servers when processing statlfile When changesets referencing largefiles are pushed then the corresponding largefiles will be pushed too - unless the target already has them. The client will use statlfile to make sure it only sends largefiles that the target doesn't have. The server would however on every statlfile check that the content of the largefile had the expected hash. What should be cheap thus became an expensive operation that trashed the disk and the cache. Largefile hashes are already checked by putlfile before being stored on the server. A server should thus be able to keep its largefile store free of errors - even more than it can keep revlogs free of errors. Verification should happen when running 'hg verify' locally on the server. Rehashing every largefile on every remote stat is too expensive. Clients will also stat lfiles before downloading them. When the server verified the hash in stat it meant that it had to read the file twice to serve it. With this change the server will assume its own hashes are ok without checking them on every statlfile. Some consequences of this change: - in case of server side corruption the problem will be detected by the existing check on the client side - not on server side - clients that could upload an uncorrupted largefile when pushing will no longer magically heal the server (and break hardlinks) - a client will now only upload its uncorrupted files after the corrupted file has been removed on the server side - client side verify will no longer report corruption in files it doesn't have (Issue3123 discussed related problems - and how they have been fixed.)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4514
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
     1
#!/usr/bin/env python
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
     2
#
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
     3
# Wrapper script around the convert.py hgext extension
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
     4
# for foreign SCM conversion to mercurial format.
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
     5
#
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
     6
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
     7
import sys
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
     8
from mercurial import ui, fancyopts
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
     9
from hgext import convert
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    10
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    11
# Options extracted from the cmdtable
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    12
func, options, help = convert.cmdtable['convert']
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    13
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    14
# An ui instance
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    15
u = ui.ui()
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    16
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    17
opts = {}
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    18
args = []
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    19
try:
6365
1d3eb332f3cb convertrepo: make it work with refactored convert extension
Patrick Mezard <pmezard@gmail.com>
parents: 4514
diff changeset
    20
    args = list(fancyopts.fancyopts(sys.argv[1:], options, opts))
1d3eb332f3cb convertrepo: make it work with refactored convert extension
Patrick Mezard <pmezard@gmail.com>
parents: 4514
diff changeset
    21
    args += [None]*(3 - len(args))
1d3eb332f3cb convertrepo: make it work with refactored convert extension
Patrick Mezard <pmezard@gmail.com>
parents: 4514
diff changeset
    22
    src, dest, revmapfile = args
1d3eb332f3cb convertrepo: make it work with refactored convert extension
Patrick Mezard <pmezard@gmail.com>
parents: 4514
diff changeset
    23
except (fancyopts.getopt.GetoptError, ValueError), inst:
1d3eb332f3cb convertrepo: make it work with refactored convert extension
Patrick Mezard <pmezard@gmail.com>
parents: 4514
diff changeset
    24
    u.warn('Usage:\n%s\n' % help)
4514
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    25
    sys.exit(-1)
ec889780f28b Add a wrapper script for convert extension
Edouard Gomez <ed.gomez@free.fr>
parents:
diff changeset
    26
6365
1d3eb332f3cb convertrepo: make it work with refactored convert extension
Patrick Mezard <pmezard@gmail.com>
parents: 4514
diff changeset
    27
convert.convert(u, src, dest, revmapfile, **opts)