##// END OF EJS Templates
templatekw: remove pycompat.iteritems()...
templatekw: remove pycompat.iteritems() Differential Revision: https://phab.mercurial-scm.org/D12335

File last commit:

r49730:6000f5b2 default
r49785:e6df205a default
Show More
reposetup.py
467 lines | 18.2 KiB | text/x-python | PythonLexer
various
hgext: add largefiles extension...
r15168 # Copyright 2009-2010 Gregory P. Ward
# Copyright 2009-2010 Intelerad Medical Systems Incorporated
# Copyright 2010-2011 Fog Creek Software
# Copyright 2010-2011 Unity Technologies
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
'''setup for largefiles repositories: reposetup'''
liscju
py3: make largefiles/reposetup.py use absolute_import
r29314
various
hgext: add largefiles extension...
r15168 import copy
from mercurial.i18n import _
liscju
py3: make largefiles/reposetup.py use absolute_import
r29314 from mercurial import (
error,
Martin von Zweigbergk
largefiles: avoid dynamically subclassing context instances...
r43986 extensions,
liscju
py3: make largefiles/reposetup.py use absolute_import
r29314 localrepo,
liscju
largefiles: rename match_ to matchmod import in reposetup
r29319 match as matchmod,
liscju
py3: make largefiles/reposetup.py use absolute_import
r29314 scmutil,
Martin von Zweigbergk
largefiles: use context manager for wlock in repo.status() override...
r43984 util,
liscju
py3: make largefiles/reposetup.py use absolute_import
r29314 )
status: adapt largefile to gather stats at lookup time...
r49205 from mercurial.dirstateutils import timestamp
liscju
py3: make largefiles/reposetup.py use absolute_import
r29314 from . import (
lfcommands,
lfutil,
)
various
hgext: add largefiles extension...
r15168
Augie Fackler
formatting: blacken the codebase...
r43346
various
hgext: add largefiles extension...
r15168 def reposetup(ui, repo):
FUJIWARA Katsunori
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)...
r20858 # wire repositories should be given new wireproto functions
# by "proto.wirereposetup()" via "hg.wirepeersetupfuncs"
various
hgext: add largefiles extension...
r15168 if not repo.local():
FUJIWARA Katsunori
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)...
r20858 return
various
hgext: add largefiles extension...
r15168
Na'Tosha Bard
largefiles: remove use of underscores that breaks coding convention
r16247 class lfilesrepo(repo.__class__):
FUJIWARA Katsunori
largefiles: access to specific fields only if largefiles enabled (issue4547)...
r24158 # the mark to examine whether "repo" object enables largefiles or not
_largefilesenabled = True
various
hgext: add largefiles extension...
r15168 lfstatus = False
Augie Fackler
formatting: blacken the codebase...
r43346
Greg Ward
largefiles: improve comments, internal docstrings...
r15252 # When lfstatus is set, return a context that gives the names
# of largefiles instead of their corresponding standins and
# identifies the largefiles as always binary, regardless of
# their actual contents.
various
hgext: add largefiles extension...
r15168 def __getitem__(self, changeid):
Na'Tosha Bard
largefiles: remove use of underscores that breaks coding convention
r16247 ctx = super(lfilesrepo, self).__getitem__(changeid)
Matt Harbison
largefiles: revert to lfilesrepo.status() being an unfiltered method...
r23958 if self.lfstatus:
Augie Fackler
formatting: blacken the codebase...
r43346
Martin von Zweigbergk
largefiles: avoid dynamically subclassing context instances...
r43986 def files(orig):
filenames = orig()
return [lfutil.splitstandin(f) or f for f in filenames]
Augie Fackler
formatting: blacken the codebase...
r43346
Martin von Zweigbergk
largefiles: avoid dynamically subclassing context instances...
r43986 extensions.wrapfunction(ctx, 'files', files)
def manifest(orig):
man1 = orig()
Augie Fackler
formatting: blacken the codebase...
r43346
Martin von Zweigbergk
largefiles: avoid dynamically subclassing context instances...
r43986 class lfilesmanifest(man1.__class__):
def __contains__(self, filename):
orig = super(lfilesmanifest, self).__contains__
return orig(filename) or orig(
lfutil.standin(filename)
)
Augie Fackler
formatting: blacken the codebase...
r43346
Martin von Zweigbergk
largefiles: avoid dynamically subclassing context instances...
r43986 man1.__class__ = lfilesmanifest
return man1
Augie Fackler
formatting: blacken the codebase...
r43346
Martin von Zweigbergk
largefiles: avoid dynamically subclassing context instances...
r43986 extensions.wrapfunction(ctx, 'manifest', manifest)
Augie Fackler
formatting: blacken the codebase...
r43346
Martin von Zweigbergk
largefiles: avoid dynamically subclassing context instances...
r43986 def filectx(orig, path, fileid=None, filelog=None):
try:
if filelog is not None:
result = orig(path, fileid, filelog)
else:
result = orig(path, fileid)
except error.LookupError:
# Adding a null character will cause Mercurial to
# identify this as a binary file.
if filelog is not None:
result = orig(lfutil.standin(path), fileid, filelog)
else:
result = orig(lfutil.standin(path), fileid)
olddata = result.data
result.data = lambda: olddata() + b'\0'
return result
extensions.wrapfunction(ctx, 'filectx', filectx)
various
hgext: add largefiles extension...
r15168 return ctx
# Figure out the status of big files and insert them into the
Greg Ward
largefiles: improve comments, internal docstrings...
r15252 # appropriate list in the result. Also removes standin files
# from the listing. Revert to the original status if
# self.lfstatus is False.
Matt Harbison
largefiles: revert to lfilesrepo.status() being an unfiltered method...
r23958 # XXX large file status is buggy when used on repo proxy.
# XXX this needs to be investigated.
@localrepo.unfilteredmethod
Augie Fackler
formatting: blacken the codebase...
r43346 def status(
self,
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 node1=b'.',
Augie Fackler
formatting: blacken the codebase...
r43346 node2=None,
match=None,
ignored=False,
clean=False,
unknown=False,
listsubrepos=False,
):
various
hgext: add largefiles extension...
r15168 listignored, listclean, listunknown = ignored, clean, unknown
Martin von Zweigbergk
largefiles: extract 'orig' method in reposetup.status
r22518 orig = super(lfilesrepo, self).status
Matt Harbison
largefiles: revert to lfilesrepo.status() being an unfiltered method...
r23958 if not self.lfstatus:
Augie Fackler
formatting: blacken the codebase...
r43346 return orig(
node1,
node2,
match,
listignored,
listclean,
listunknown,
listsubrepos,
)
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515
# some calls in this function rely on the old version of status
Matt Harbison
largefiles: revert to lfilesrepo.status() being an unfiltered method...
r23958 self.lfstatus = False
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 ctx1 = self[node1]
ctx2 = self[node2]
working = ctx2.rev() is None
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 parentworking = working and ctx1 == self[b'.']
various
hgext: add largefiles extension...
r15168
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 if match is None:
Martin von Zweigbergk
match: delete unused root and cwd arguments from {always,never,exact}() (API)...
r41825 match = matchmod.always()
various
hgext: add largefiles extension...
r15168
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 try:
Martin von Zweigbergk
largefiles: use context manager for wlock in repo.status() override...
r43984 # updating the dirstate is optional
# so we don't wait on the lock
wlock = self.wlock(False)
gotlock = True
except error.LockError:
wlock = util.nullcontextmanager()
gotlock = False
with wlock:
Na'Tosha Bard
largefiles: optimize status when files are specified (issue3144)...
r15653
Martin von Zweigbergk
largefiles: shortcircuit status code also for non-matching patterns...
r23146 # First check if paths or patterns were specified on the
# command line. If there were, and they don't match any
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 # largefiles, we should just bail here and let super
# handle it -- thus gaining a big performance boost.
lfdirstate = lfutil.openlfdirstate(ui, self)
Martin von Zweigbergk
largefiles: shortcircuit status code also for non-matching patterns...
r23146 if not match.always():
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 for f in lfdirstate:
if match(f):
break
else:
Augie Fackler
formatting: blacken the codebase...
r43346 return orig(
node1,
node2,
match,
listignored,
listclean,
listunknown,
listsubrepos,
)
various
hgext: add largefiles extension...
r15168
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 # Create a copy of match that matches standins instead
# of largefiles.
def tostandins(files):
if not working:
return files
newfiles = []
dirstate = self.dirstate
for f in files:
sf = lfutil.standin(f)
if sf in dirstate:
newfiles.append(sf)
Mark Thomas
dirstate: add explicit methods for querying directories (API)...
r35083 elif dirstate.hasdir(sf):
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 # Directory entries could be regular or
# standin, check both
newfiles.extend((f, sf))
else:
newfiles.append(f)
return newfiles
Mads Kiilerich
largefiles: unindent code
r18149
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 m = copy.copy(match)
m._files = tostandins(m._files)
Augie Fackler
formatting: blacken the codebase...
r43346 result = orig(
node1, node2, m, ignored, clean, unknown, listsubrepos
)
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 if working:
Na'Tosha Bard
largefiles: optimize performance of status on largefiles repos (issue3136)
r15617
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 def sfindirstate(f):
sf = lfutil.standin(f)
dirstate = self.dirstate
Mark Thomas
dirstate: add explicit methods for querying directories (API)...
r35083 return sf in dirstate or dirstate.hasdir(sf)
Mads Kiilerich
largefiles: unindent code
r18149
Augie Fackler
formatting: blacken the codebase...
r43346 match._files = [f for f in match._files if sfindirstate(f)]
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 # Don't waste time getting the ignored and unknown
# files from lfdirstate
status: use filesystem time boundary to invalidate racy mtime...
r49213 unsure, s, mtime_boundary = lfdirstate.status(
Augie Fackler
formatting: blacken the codebase...
r43346 match,
subrepos=[],
ignored=False,
clean=listclean,
unknown=False,
)
Mads Kiilerich
largefiles: fix 'deleted' files sometimes persistently appearing with R status...
r30191 (modified, added, removed, deleted, clean) = (
Augie Fackler
formatting: blacken the codebase...
r43346 s.modified,
s.added,
s.removed,
s.deleted,
s.clean,
)
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 if parentworking:
status: adapt largefile to gather stats at lookup time...
r49205 wctx = repo[None]
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 for lfile in unsure:
standin = lfutil.standin(lfile)
if standin not in ctx1:
# from second parent
modified.append(lfile)
Augie Fackler
formatting: blacken the codebase...
r43346 elif lfutil.readasstandin(
ctx1[standin]
) != lfutil.hashfile(self.wjoin(lfile)):
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 modified.append(lfile)
else:
Martin von Zweigbergk
largefiles: remove unnecessary clearing of status fields...
r22523 if listclean:
clean.append(lfile)
status: adapt largefile to gather stats at lookup time...
r49205 s = wctx[lfile].lstat()
mode = s.st_mode
size = s.st_size
largefile: use the proper "mtime boundary" logic during fixup...
r49225 mtime = timestamp.reliable_mtime_of(
s, mtime_boundary
)
if mtime is not None:
cache_data = (mode, size, mtime)
lfdirstate.set_clean(lfile, cache_data)
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 else:
tocheck = unsure + modified + added + clean
modified, added, clean = [], [], []
FUJIWARA Katsunori
largefiles: avoid exec-bit examination on the platform being unaware of it...
r23383 checkexec = self.dirstate._checkexec
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515
for lfile in tocheck:
standin = lfutil.standin(lfile)
Mads Kiilerich
largefiles: inline redundant inctx function in status
r23043 if standin in ctx1:
FUJIWARA Katsunori
largefiles: add examination of exec bit in "hg status --rev REV" case...
r23090 abslfile = self.wjoin(lfile)
Augie Fackler
formatting: blacken the codebase...
r43346 if (
lfutil.readasstandin(ctx1[standin])
!= lfutil.hashfile(abslfile)
) or (
checkexec
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 and (b'x' in ctx1.flags(standin))
Augie Fackler
formatting: blacken the codebase...
r43346 != bool(lfutil.getexecutable(abslfile))
):
various
hgext: add largefiles extension...
r15168 modified.append(lfile)
Martin von Zweigbergk
largefiles: remove unnecessary clearing of status fields...
r22523 elif listclean:
various
hgext: add largefiles extension...
r15168 clean.append(lfile)
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 else:
added.append(lfile)
various
hgext: add largefiles extension...
r15168
FUJIWARA Katsunori
largefiles: ignore removal status of files not managed in the target context...
r23089 # at this point, 'removed' contains largefiles
# marked as 'R' in the working context.
# then, largefiles not managed also in the target
# context should be excluded from 'removed'.
Augie Fackler
formatting: blacken the codebase...
r43346 removed = [
lfile
for lfile in removed
if lfutil.standin(lfile) in ctx1
]
FUJIWARA Katsunori
largefiles: ignore removal status of files not managed in the target context...
r23089
Mads Kiilerich
largefiles: fix 'deleted' files sometimes persistently appearing with R status...
r30191 # Standins no longer found in lfdirstate have been deleted
Martin von Zweigbergk
largefiles: simplify iteration over standins...
r22525 for standin in ctx1.walk(lfutil.getstandinmatcher(self)):
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 lfile = lfutil.splitstandin(standin)
if not match(lfile):
continue
if lfile not in lfdirstate:
Mads Kiilerich
largefiles: fix 'deleted' files sometimes persistently appearing with R status...
r30191 deleted.append(lfile)
# Sync "largefile has been removed" back to the
# standin. Removing a file as a side effect of
# running status is gross, but the alternatives (if
# any) are worse.
Mads Kiilerich
largefiles: handle that a found standin file doesn't exist when removing it...
r30233 self.wvfs.unlinkpath(standin, ignoremissing=True)
Martin Geisler
largefiles: handle merges between normal files and largefiles (issue3084)...
r15663
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 # Filter result lists
result = list(result)
Mads Kiilerich
largefiles: wlock in status before lfdirstate.write()
r19056
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 # Largefiles are not really removed when they're
# still in the normal dirstate. Likewise, normal
# files are not really removed if they are still in
# lfdirstate. This happens in merges where files
# change type.
Augie Fackler
formatting: blacken the codebase...
r43346 removed = [f for f in removed if f not in self.dirstate]
result[2] = [f for f in result[2] if f not in lfdirstate]
Martin Geisler
largefiles: handle merges between normal files and largefiles (issue3084)...
r15663
Augie Fackler
cleanup: fix leakage of dirstate._map to client code...
r43196 lfiles = set(lfdirstate)
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515 # Unknown files
result[4] = set(result[4]).difference(lfiles)
# Ignored files
result[5] = set(result[5]).difference(lfiles)
# combine normal files and largefiles
Augie Fackler
formatting: blacken the codebase...
r43346 normals = [
[fn for fn in filelist if not lfutil.isstandin(fn)]
for filelist in result
]
lfstatus = (
modified,
added,
removed,
deleted,
[],
[],
clean,
)
result = [
sorted(list1 + list2)
for (list1, list2) in zip(normals, lfstatus)
]
else: # not against working directory
result = [
[lfutil.splitstandin(f) or f for f in items]
for items in result
]
Martin Geisler
largefiles: handle merges between normal files and largefiles (issue3084)...
r15663
Martin von Zweigbergk
largefiles: use context manager for wlock in repo.status() override...
r43984 if gotlock:
Pulkit Goyal
largefiles: pass current transaction to `lfdirstate.write()`...
r48982 lfdirstate.write(self.currenttransaction())
Martin von Zweigbergk
largefiles: reduce indentation by dropping 'else' block after 'return'
r22515
Matt Harbison
largefiles: revert to lfilesrepo.status() being an unfiltered method...
r23958 self.lfstatus = True
Martin von Zweigbergk
status: update various other methods to return new class
r22914 return scmutil.status(*result)
various
hgext: add largefiles extension...
r15168
FUJIWARA Katsunori
largefiles: factor out procedures to update lfdirstate for post-committing...
r23184 def commitctx(self, ctx, *args, **kwargs):
node = super(lfilesrepo, self).commitctx(ctx, *args, **kwargs)
Augie Fackler
formatting: blacken the codebase...
r43346
FUJIWARA Katsunori
largefiles: factor out procedures to update lfdirstate for post-committing...
r23184 class lfilesctx(ctx.__class__):
def markcommitted(self, node):
orig = super(lfilesctx, self).markcommitted
return lfutil.markcommitted(orig, self, node)
Augie Fackler
formatting: blacken the codebase...
r43346
FUJIWARA Katsunori
largefiles: factor out procedures to update lfdirstate for post-committing...
r23184 ctx.__class__ = lfilesctx
various
hgext: add largefiles extension...
r15168 return node
Greg Ward
largefiles: more work on cleaning up comments...
r15254 # Before commit, largefile standins have not had their
# contents updated to reflect the hash of their largefile.
# Do that here.
Augie Fackler
formatting: blacken the codebase...
r43346 def commit(
self,
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 text=b"",
Augie Fackler
formatting: blacken the codebase...
r43346 user=None,
date=None,
match=None,
force=False,
editor=False,
extra=None,
):
Pierre-Yves David
largefiles: don't use mutable default argument value...
r31410 if extra is None:
extra = {}
Na'Tosha Bard
largefiles: remove use of underscores that breaks coding convention
r16247 orig = super(lfilesrepo, self).commit
various
hgext: add largefiles extension...
r15168
Bryan O'Sullivan
with: use context manager in largefiles commit
r27842 with self.wlock():
FUJIWARA Katsunori
largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures...
r23186 lfcommithook = self._lfcommithooks[-1]
match = lfcommithook(self, match)
Augie Fackler
formatting: blacken the codebase...
r43346 result = orig(
text=text,
user=user,
date=date,
match=match,
force=force,
editor=editor,
extra=extra,
)
Levi Bard
largefiles: fix inappropriate locking (issue3182)...
r15794 return result
various
hgext: add largefiles extension...
r15168
FUJIWARA Katsunori
largefiles: factor out procedures to update standins for pre-committing...
r23185 # TODO: _subdirlfs should be moved into "lfutil.py", because
# it is referred only from "lfutil.updatestandinsbymatch"
Levi Bard
largefiles: commit directories that only contain largefiles (issue3548)...
r18064 def _subdirlfs(self, files, lfiles):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Levi Bard
largefiles: commit directories that only contain largefiles (issue3548)...
r18064 Adjust matched file list
Mads Kiilerich
spelling: fixes from proofreading of spell checker issues
r23543 If we pass a directory to commit whose only committable files
Levi Bard
largefiles: commit directories that only contain largefiles (issue3548)...
r18064 are largefiles, the core commit code aborts before finding
the largefiles.
So we do the following:
For directories that only have largefiles as matches,
Mads Kiilerich
spelling: fix some minor issues found by spell checker
r18644 we explicitly add the largefiles to the match list and remove
Levi Bard
largefiles: commit directories that only contain largefiles (issue3548)...
r18064 the directory.
In other cases, we leave the match list unmodified.
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Levi Bard
largefiles: commit directories that only contain largefiles (issue3548)...
r18064 actualfiles = []
dirs = []
regulars = []
for f in files:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if lfutil.isstandin(f + b'/'):
Pierre-Yves David
error: get Abort from 'error' instead of 'util'...
r26587 raise error.Abort(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 _(b'file "%s" is a largefile standin') % f,
hint=b'commit the largefile itself instead',
Augie Fackler
formatting: blacken the codebase...
r43346 )
Levi Bard
largefiles: commit directories that only contain largefiles (issue3548)...
r18064 # Scan directories
liscju
largefiles: replace invocation of os.path module by vfs in reposetup.py...
r28716 if self.wvfs.isdir(f):
Levi Bard
largefiles: commit directories that only contain largefiles (issue3548)...
r18064 dirs.append(f)
else:
regulars.append(f)
for f in dirs:
matcheddir = False
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 d = self.dirstate.normalize(f) + b'/'
Levi Bard
largefiles: commit directories that only contain largefiles (issue3548)...
r18064 # Check for matched normal files
for mf in regulars:
if self.dirstate.normalize(mf).startswith(d):
actualfiles.append(f)
matcheddir = True
break
if not matcheddir:
# If no normal match, manually append
# any matching largefiles
for lf in lfiles:
if self.dirstate.normalize(lf).startswith(d):
actualfiles.append(lf)
if not matcheddir:
Matt Harbison
largefiles: fix commit of a directory with no largefile changes (issue4330)...
r23923 # There may still be normal files in the dir, so
Mads Kiilerich
spelling: fixes from proofreading of spell checker issues
r24180 # add a directory to the list, which
Matt Harbison
largefiles: update _subdirlfs() comment...
r24007 # forces status/dirstate to walk all files and
# call the match function on the matcher, even
Mads Kiilerich
spelling: fixes from proofreading of spell checker issues
r24180 # on case sensitive filesystems.
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 actualfiles.append(b'.')
Levi Bard
largefiles: commit directories that only contain largefiles (issue3548)...
r18064 matcheddir = True
# Nothing in dir, so readd it
# and let commit reject it
if not matcheddir:
actualfiles.append(f)
# Always add normal files
actualfiles += regulars
return actualfiles
Na'Tosha Bard
largefiles: remove use of underscores that breaks coding convention
r16247 repo.__class__ = lfilesrepo
various
hgext: add largefiles extension...
r15168
FUJIWARA Katsunori
largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures...
r23186 # stack of hooks being executed before committing.
# only last element ("_lfcommithooks[-1]") is used for each committing.
repo._lfcommithooks = [lfutil.updatestandinsbymatch]
FUJIWARA Katsunori
largefiles: introduce "_lfstatuswriters" to customize status reporting...
r23188 # Stack of status writer functions taking "*msg, **opts" arguments
Mads Kiilerich
spelling: fixes from proofreading of spell checker issues
r23543 # like "ui.status()". Only last element ("_lfstatuswriters[-1]")
FUJIWARA Katsunori
largefiles: introduce "_lfstatuswriters" to customize status reporting...
r23188 # is used to write status out.
repo._lfstatuswriters = [ui.status]
Mads Kiilerich
localrepo: refactor prepushoutgoinghook to take a pushop...
r28876 def prepushoutgoinghook(pushop):
Mads Kiilerich
largefiles: introduce push --lfrev to control which revisions are pushed...
r28878 """Push largefiles for pushop before pushing revisions."""
lfrevs = pushop.lfrevs
if lfrevs is None:
lfrevs = pushop.outgoing.missing
if lfrevs:
FUJIWARA Katsunori
largefiles: reuse "findcommonoutgoing()" result at "hg push"...
r21044 toupload = set()
addfunc = lambda fn, lfhash: toupload.add(lfhash)
Augie Fackler
formatting: blacken the codebase...
r43346 lfutil.getlfilestoupload(pushop.repo, lfrevs, addfunc)
Mads Kiilerich
localrepo: refactor prepushoutgoinghook to take a pushop...
r28876 lfcommands.uploadlfiles(ui, pushop.repo, pushop.remote, toupload)
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 repo.prepushoutgoinghooks.add(b"largefiles", prepushoutgoinghook)
FUJIWARA Katsunori
largefiles: reuse "findcommonoutgoing()" result at "hg push"...
r21044
various
hgext: add largefiles extension...
r15168 def checkrequireslfiles(ui, repo, **kwargs):
largefiles: take lock before writing requirements...
r49510 with repo.lock():
if b'largefiles' not in repo.requirements and any(
lfutil.shortname + b'/' in f[1] for f in repo.store.datafiles()
):
repo.requirements.add(b'largefiles')
scmutil.writereporequirements(repo)
various
hgext: add largefiles extension...
r15168
Augie Fackler
formatting: blacken the codebase...
r43346 ui.setconfig(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b'hooks', b'changegroup.lfiles', checkrequireslfiles, b'largefiles'
Augie Fackler
formatting: blacken the codebase...
r43346 )
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 ui.setconfig(b'hooks', b'commit.lfiles', checkrequireslfiles, b'largefiles')