hgext/largefiles/__init__.py
author Greg Ward <greg@gerg.ca>
Sat, 01 Oct 2011 16:39:51 -0400
changeset 15188 8e115063950d
parent 15168 cfccd3bee7b3
child 15230 697289c5d415
permissions -rw-r--r--
largefiles: don't break existing tests (syntax error, bad imports)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     1
# Copyright 2009-2010 Gregory P. Ward
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     2
# Copyright 2009-2010 Intelerad Medical Systems Incorporated
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     3
# Copyright 2010-2011 Fog Creek Software
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     4
# Copyright 2010-2011 Unity Technologies
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     5
#
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     6
# This software may be used and distributed according to the terms of the
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     7
# GNU General Public License version 2 or any later version.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     8
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
     9
'''track large binary files
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    10
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    11
Large binary files tend to be not very compressible, not very "diffable", and
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    12
not at all mergeable.  Such files are not handled well by Mercurial\'s storage
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    13
format (revlog), which is based on compressed binary deltas.  largefiles solves
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    14
this problem by adding a centralized client-server layer on top of Mercurial:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    15
largefiles live in a *central store* out on the network somewhere, and you only
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    16
fetch the ones that you need when you need them.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    17
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    18
largefiles works by maintaining a *standin* in .hglf/ for each largefile.  The
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    19
standins are small (41 bytes: an SHA-1 hash plus newline) and are tracked by
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    20
Mercurial.  Largefile revisions are identified by the SHA-1 hash of their
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    21
contents, which is written to the standin.  largefiles uses that revision ID to
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    22
get/put largefile revisions from/to the central store.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    23
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    24
A complete tutorial for using lfiles is included in ``usage.txt`` in the lfiles
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    25
source distribution.  See
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    26
https://developers.kilnhg.com/Repo/Kiln/largefiles/largefiles/File/usage.txt
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    27
'''
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    28
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    29
from mercurial import commands
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    30
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    31
import lfcommands
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    32
import reposetup
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    33
import uisetup
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    34
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    35
reposetup = reposetup.reposetup
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    36
uisetup = uisetup.uisetup
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    37
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    38
commands.norepo += " lfconvert"
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    39
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    40
cmdtable = lfcommands.cmdtable