hgext/largefiles/overrides.py
author Arseniy Alekseyev <aalekseyev@janestreet.com>
Tue, 09 Apr 2024 11:00:52 +0100
changeset 51601 ea3343104f07
parent 50928 d718eddf01d9
permissions -rw-r--r--
largefiles: track if a matcher was tampered with This is used to make sure rust fast path is not taken for the modified matchers.
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
'''Overridden Mercurial commands and functions for the largefiles extension'''
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    10
50027
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
    11
import contextlib
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    12
import copy
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    13
import os
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    14
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    15
from mercurial.i18n import _
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    16
43085
eef9a2d67051 py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43077
diff changeset
    17
from mercurial.pycompat import open
eef9a2d67051 py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43077
diff changeset
    18
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
    19
from mercurial.hgweb import webcommands
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
    20
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    21
from mercurial import (
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    22
    archival,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    23
    cmdutil,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
    24
    copies as copiesmod,
50027
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
    25
    dirstate,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    26
    error,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
    27
    exchange,
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
    28
    extensions,
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
    29
    exthelper,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
    30
    filemerge,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    31
    hg,
35885
7625b4f7db70 cmdutil: split functions of log-like commands to new module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35623
diff changeset
    32
    logcmdutil,
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
    33
    match as matchmod,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
    34
    merge,
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44452
diff changeset
    35
    mergestate as mergestatemod,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    36
    pathutil,
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
    37
    pycompat,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    38
    scmutil,
31023
aea06029919e revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents: 30215
diff changeset
    39
    smartset,
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
    40
    subrepo,
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
    41
    url as urlmod,
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    42
    util,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    43
)
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    44
46047
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
    45
from mercurial.upgrade_utils import (
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
    46
    actions as upgrade_actions,
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
    47
)
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45942
diff changeset
    48
29311
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    49
from . import (
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    50
    lfcommands,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    51
    lfutil,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    52
    storefactory,
b76abae75161 py3: make largefiles/overrides.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 29305
diff changeset
    53
)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    54
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
    55
ACTION_ADD = mergestatemod.ACTION_ADD
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
    56
ACTION_DELETED_CHANGED = mergestatemod.ACTION_DELETED_CHANGED
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
    57
ACTION_GET = mergestatemod.ACTION_GET
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
    58
ACTION_KEEP = mergestatemod.ACTION_KEEP
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
    59
ACTION_REMOVE = mergestatemod.ACTION_REMOVE
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
    60
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
    61
eh = exthelper.exthelper()
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
    62
43583
73e6d3346e4f largefiles: move lfstatus context manager to lfutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43506
diff changeset
    63
lfstatus = lfutil.lfstatus
73e6d3346e4f largefiles: move lfstatus context manager to lfutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43506
diff changeset
    64
48711
9bc86adf32f6 merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48709
diff changeset
    65
MERGE_ACTION_LARGEFILE_MARK_REMOVED = mergestatemod.MergeAction('lfmr')
45298
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
    66
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
    67
# -- Utility functions: commonly/repeatedly needed functionality ---------------
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
    68
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
    69
23617
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
    70
def composelargefilematcher(match, manifest):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
    71
    """create a matcher that matches only the largefiles in the original
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
    72
    matcher"""
23617
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
    73
    m = copy.copy(match)
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
    74
    m._was_tampered_with = True
23617
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
    75
    lfile = lambda f: lfutil.standin(f) in manifest
36311
b9da10f310f4 largfiles: replace filter() with listcomp when result needs to be a list
Augie Fackler <augie@google.com>
parents: 36205
diff changeset
    76
    m._files = [lf for lf in m._files if lfile(lf)]
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
    77
    m._fileset = set(m._files)
32388
4a23cdb32968 largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents: 32382
diff changeset
    78
    m.always = lambda: False
23617
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
    79
    origmatchfn = m.matchfn
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
    80
    m.matchfn = lambda f: lfile(f) and origmatchfn(f)
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
    81
    return m
f1e6b86da4c0 largefiles: introduce the 'composelargefilematcher()' method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23592
diff changeset
    82
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
    83
23769
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
    84
def composenormalfilematcher(match, manifest, exclude=None):
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
    85
    excluded = set()
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
    86
    if exclude is not None:
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
    87
        excluded.update(exclude)
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
    88
23428
b5e3f3d25395 largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23426
diff changeset
    89
    m = copy.copy(match)
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
    90
    m._was_tampered_with = True
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
    91
    notlfile = lambda f: not (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
    92
        lfutil.isstandin(f) or lfutil.standin(f) in manifest or f in excluded
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
    93
    )
36311
b9da10f310f4 largfiles: replace filter() with listcomp when result needs to be a list
Augie Fackler <augie@google.com>
parents: 36205
diff changeset
    94
    m._files = [lf for lf in m._files if notlfile(lf)]
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
    95
    m._fileset = set(m._files)
32388
4a23cdb32968 largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents: 32382
diff changeset
    96
    m.always = lambda: False
23428
b5e3f3d25395 largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23426
diff changeset
    97
    origmatchfn = m.matchfn
b5e3f3d25395 largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23426
diff changeset
    98
    m.matchfn = lambda f: notlfile(f) and origmatchfn(f)
b5e3f3d25395 largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23426
diff changeset
    99
    return m
b5e3f3d25395 largefiles: split the creation of a normal matcher out of its install method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23426
diff changeset
   100
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   101
41654
f164076427b2 largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41653
diff changeset
   102
def addlargefiles(ui, repo, isaddremove, matcher, uipathfn, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
   103
    large = opts.get('large')
15227
a7686abf73a6 largefiles: factor out lfutil.getminsize()
Greg Ward <greg@gerg.ca>
parents: 15224
diff changeset
   104
    lfsize = lfutil.getminsize(
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
   105
        ui, lfutil.islfilesrepo(repo), opts.get('lfsize')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   106
    )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   107
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   108
    lfmatcher = None
15739
be55285470cf largefiles: tiny code clean up
Michal Sznajder <michalsznajder@gmail.com>
parents: 15674
diff changeset
   109
    if lfutil.islfilesrepo(repo):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   110
        lfpats = ui.configlist(lfutil.longname, b'patterns')
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   111
        if lfpats:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   112
            lfmatcher = matchmod.match(repo.root, b'', list(lfpats))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   113
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   114
    lfnames = []
25440
1a95c57959f6 largefiles: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25189
diff changeset
   115
    m = matcher
1a95c57959f6 largefiles: replace match.bad() monkey patching with match.badmatch()
Matt Harbison <matt_harbison@yahoo.com>
parents: 25189
diff changeset
   116
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   117
    wctx = repo[None]
32382
c87db79b9507 cleanup: reuse existing wctx variables instead of calling repo[None]
Martin von Zweigbergk <martinvonz@google.com>
parents: 32361
diff changeset
   118
    for f in wctx.walk(matchmod.badmatch(m, lambda x, y: None)):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   119
        exact = m.exact(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   120
        lfile = lfutil.standin(f) in wctx
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   121
        nfile = f in wctx
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   122
        exists = lfile or nfile
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   123
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   124
        # Don't warn the user when they attempt to add a normal tracked file.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   125
        # The normal add code will do that for us.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   126
        if exact and exists:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   127
            if lfile:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   128
                ui.warn(_(b'%s already a largefile\n') % uipathfn(f))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   129
            continue
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   130
17232
25248e2ebaee largefiles: ensure addlargefiles() doesn't add a standin as a largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 17231
diff changeset
   131
        if (exact or not exists) and not lfutil.isstandin(f):
17231
2446b63c89ec largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17229
diff changeset
   132
            # In case the file was removed previously, but not committed
2446b63c89ec largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17229
diff changeset
   133
            # (issue3507)
23733
86810cd85eb8 largefiles: convert addlargefiles() to vfs
Matt Harbison <matt_harbison@yahoo.com>
parents: 23726
diff changeset
   134
            if not repo.wvfs.exists(f):
17231
2446b63c89ec largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17229
diff changeset
   135
                continue
2446b63c89ec largefiles: fix a traceback when addremove follows a remove (issue3507)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17229
diff changeset
   136
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   137
            abovemin = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   138
                lfsize and repo.wvfs.lstat(f).st_size >= lfsize * 1024 * 1024
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   139
            )
15255
7ab05d752405 largefiles: cosmetics, whitespace, code style
Greg Ward <greg@gerg.ca>
parents: 15254
diff changeset
   140
            if large or abovemin or (lfmatcher and lfmatcher(f)):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   141
                lfnames.append(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   142
                if ui.verbose or not exact:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   143
                    ui.status(_(b'adding %s as a largefile\n') % uipathfn(f))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   144
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   145
    bad = []
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   146
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
   147
    # Need to lock, otherwise there could be a race condition between
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
   148
    # when standins are created and added to the repo.
27821
bf3bf7158f69 with: use context manager for wlock in addlargefiles
Bryan O'Sullivan <bryano@fb.com>
parents: 27772
diff changeset
   149
    with repo.wlock():
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
   150
        if not opts.get('dry_run'):
23041
a36625ef1f35 largefiles: move initialization of standins variable to clarify its "scope"
Mads Kiilerich <madski@unity3d.com>
parents: 23040
diff changeset
   151
            standins = []
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   152
            lfdirstate = lfutil.openlfdirstate(ui, repo)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   153
            for f in lfnames:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   154
                standinname = lfutil.standin(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   155
                lfutil.writestandin(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   156
                    repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   157
                    standinname,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   158
                    hash=b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   159
                    executable=lfutil.getexecutable(repo.wjoin(f)),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   160
                )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   161
                standins.append(standinname)
47648
093b1df410c9 largefile: use `set_tracked` in the `hg add` overwrite
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46494
diff changeset
   162
                lfdirstate.set_tracked(f)
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
   163
            lfdirstate.write(repo.currenttransaction())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   164
            bad += [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   165
                lfutil.splitstandin(f)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   166
                for f in repo[None].add(standins)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   167
                if f in m.files()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   168
            ]
23768
6b1428e55728 largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23767
diff changeset
   169
6b1428e55728 largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23767
diff changeset
   170
        added = [f for f in lfnames if f not in bad]
6b1428e55728 largefiles: return the list of added files from addlargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23767
diff changeset
   171
    return added, bad
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   172
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   173
41654
f164076427b2 largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41653
diff changeset
   174
def removelargefiles(ui, repo, isaddremove, matcher, uipathfn, dryrun, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
   175
    after = opts.get('after')
23741
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
   176
    m = composelargefilematcher(matcher, repo[None].manifest())
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
   177
    with lfstatus(repo):
23741
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
   178
        s = repo.status(match=m, clean=not isaddremove)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
   179
    manifest = repo[None].manifest()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   180
    modified, added, deleted, clean = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   181
        [f for f in list if lfutil.standin(f) in manifest]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   182
        for list in (s.modified, s.added, s.deleted, s.clean)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   183
    ]
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   184
18066
abe9799a86d6 largefiles: align rm warnings with warnings used in core
Mads Kiilerich <madski@unity3d.com>
parents: 18012
diff changeset
   185
    def warn(files, msg):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   186
        for f in files:
41654
f164076427b2 largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41653
diff changeset
   187
            ui.warn(msg % uipathfn(f))
17576
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
   188
        return int(len(files) > 0)
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
   189
15786
aca0f2b3c7e3 largefiles: fix confusion upon removal of added largefile (issue3176)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15663
diff changeset
   190
    if after:
22630
0290982e5ac7 largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22289
diff changeset
   191
        remove = deleted
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   192
        result = warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   193
            modified + added + clean, _(b'not removing %s: file still exists\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   194
        )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   195
    else:
22630
0290982e5ac7 largefiles: remove 'forget' list that's always empty
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22289
diff changeset
   196
        remove = deleted + clean
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   197
        result = warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   198
            modified,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   199
            _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   200
                b'not removing %s: file is modified (use -f'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   201
                b' to force removal)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   202
            ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   203
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   204
        result = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   205
            warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   206
                added,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   207
                _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   208
                    b'not removing %s: file has been marked for add'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   209
                    b' (use forget to undo)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   210
                ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   211
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   212
            or result
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   213
        )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   214
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   215
    # Need to lock because standin files are deleted then removed from the
17424
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 17299
diff changeset
   216
    # repository and we could race in-between.
27822
bce0afa1921a with: use context manager for wlock in removelargefiles
Bryan O'Sullivan <bryano@fb.com>
parents: 27821
diff changeset
   217
    with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   218
        lfdirstate = lfutil.openlfdirstate(ui, repo)
23658
55c92618fdd4 largefiles: eliminate a duplicate message when removing files in verbose mode
Matt Harbison <matt_harbison@yahoo.com>
parents: 23653
diff changeset
   219
        for f in sorted(remove):
23766
ce0731e58ac9 largefiles: align the output messages for a removed file with core methods
Matt Harbison <matt_harbison@yahoo.com>
parents: 23741
diff changeset
   220
            if ui.verbose or not m.exact(f):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   221
                ui.status(_(b'removing %s\n') % uipathfn(f))
23592
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
   222
37150
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
   223
            if not dryrun:
23592
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
   224
                if not after:
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
   225
                    repo.wvfs.unlinkpath(f, ignoremissing=True)
23592
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
   226
37150
335e19c6b7fa remove: add dry-run functionality
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 37088
diff changeset
   227
        if dryrun:
23592
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
   228
            return result
96d335e4eacb largefiles: don't actually remove largefiles in an addremove dry run
Matt Harbison <matt_harbison@yahoo.com>
parents: 23419
diff changeset
   229
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   230
        remove = [lfutil.standin(f) for f in remove]
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
   231
        # If this is being called by addremove, let the original addremove
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
   232
        # function handle this.
23038
3f581bfbb268 largefiles: replace repo._isaddremove hack with a simple function parameter
Mads Kiilerich <madski@unity3d.com>
parents: 22919
diff changeset
   233
        if not isaddremove:
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
   234
            for f in remove:
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
   235
                repo.wvfs.unlinkpath(f, ignoremissing=True)
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
   236
        repo[None].forget(remove)
23721
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
   237
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
   238
        for f in remove:
47653
00d70f61d856 largefile: directly use set_untracked() for removing files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47652
diff changeset
   239
            lfdirstate.set_untracked(lfutil.splitstandin(f))
23721
1b3df5ef5949 largefiles: properly sync lfdirstate after removing largefiles
Matt Harbison <matt_harbison@yahoo.com>
parents: 23695
diff changeset
   240
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
   241
        lfdirstate.write(repo.currenttransaction())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   242
17576
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
   243
    return result
e0081bb5450e largefiles: exit from remove with 1 on warnings
Matt Harbison <matt_harbison@yahoo.com>
parents: 17575
diff changeset
   244
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   245
16449
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
   246
# For overriding mercurial.hgweb.webcommands so that largefiles will
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
   247
# appear at their right place in the manifests.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   248
@eh.wrapfunction(webcommands, 'decodepath')
16449
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
   249
def decodepath(orig, path):
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
   250
    return lfutil.splitstandin(path) or path
874a680a3e23 largefiles: hide .hglf/ prefix for largefiles in hgweb
Martin Geisler <mg@lazybytes.net>
parents: 16439
diff changeset
   251
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   252
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
   253
# -- Wrappers: modify existing commands --------------------------------
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
   254
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   255
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   256
@eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   257
    b'add',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   258
    opts=[
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   259
        (b'', b'large', None, _(b'add as largefile')),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   260
        (b'', b'normal', None, _(b'add as normal file')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   261
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   262
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   263
            b'lfsize',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   264
            b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   265
            _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   266
                b'add all files above this size (in megabytes) '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   267
                b'as largefiles (default: 10)'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   268
            ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   269
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   270
    ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   271
)
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
   272
def overrideadd(orig, ui, repo, *pats, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
   273
    if opts.get('normal') and opts.get('large'):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   274
        raise error.Abort(_(b'--normal cannot be used with --large'))
23886
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
   275
    return orig(ui, repo, *pats, **opts)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
   276
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   277
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   278
@eh.wrapfunction(cmdutil, 'add')
41650
f8b18583049f add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41631
diff changeset
   279
def cmdutiladd(orig, ui, repo, matcher, prefix, uipathfn, explicitonly, **opts):
23886
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
   280
    # The --normal flag short circuits this override
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
   281
    if opts.get('normal'):
41650
f8b18583049f add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41631
diff changeset
   282
        return orig(ui, repo, matcher, prefix, uipathfn, explicitonly, **opts)
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
   283
41654
f164076427b2 largefiles: use uipathfn instead of match.{rel,uipath}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41653
diff changeset
   284
    ladded, lbad = addlargefiles(ui, repo, False, matcher, uipathfn, **opts)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   285
    normalmatcher = composenormalfilematcher(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   286
        matcher, repo[None].manifest(), ladded
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   287
    )
41650
f8b18583049f add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41631
diff changeset
   288
    bad = orig(ui, repo, normalmatcher, prefix, uipathfn, explicitonly, **opts)
23886
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
   289
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
   290
    bad.extend(f for f in lbad)
5ce8dcd05dc4 largefiles: enable subrepo support for add
Matt Harbison <matt_harbison@yahoo.com>
parents: 23884
diff changeset
   291
    return bad
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
   292
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   293
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   294
@eh.wrapfunction(cmdutil, 'remove')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   295
def cmdutilremove(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   296
    orig, ui, repo, matcher, prefix, uipathfn, after, force, subrepos, dryrun
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   297
):
23782
304e69cb1ee9 largefiles: enable subrepo support for remove
Matt Harbison <matt_harbison@yahoo.com>
parents: 23769
diff changeset
   298
    normalmatcher = composenormalfilematcher(matcher, repo[None].manifest())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   299
    result = orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   300
        ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   301
        repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   302
        normalmatcher,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   303
        prefix,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   304
        uipathfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   305
        after,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   306
        force,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   307
        subrepos,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   308
        dryrun,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   309
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   310
    return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   311
        removelargefiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   312
            ui, repo, False, matcher, uipathfn, dryrun, after=after, force=force
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   313
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   314
        or result
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   315
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   316
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
   317
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   318
@eh.wrapfunction(dirstate.dirstate, '_changing')
50027
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   319
@contextlib.contextmanager
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   320
def _changing(orig, self, repo, change_type):
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   321
    pre = sub_dirstate = getattr(self, '_sub_dirstate', None)
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   322
    try:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   323
        lfd = getattr(self, '_large_file_dirstate', False)
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   324
        if sub_dirstate is None and not lfd:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   325
            sub_dirstate = lfutil.openlfdirstate(repo.ui, repo)
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   326
            self._sub_dirstate = sub_dirstate
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   327
        if not lfd:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   328
            assert self._sub_dirstate is not None
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   329
        with orig(self, repo, change_type):
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   330
            if sub_dirstate is None:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   331
                yield
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   332
            else:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   333
                with sub_dirstate._changing(repo, change_type):
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   334
                    yield
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   335
    finally:
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   336
        self._sub_dirstate = pre
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   337
0b4a6912292e largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49960
diff changeset
   338
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   339
@eh.wrapfunction(dirstate.dirstate, 'running_status')
50142
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   340
@contextlib.contextmanager
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   341
def running_status(orig, self, repo):
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   342
    pre = sub_dirstate = getattr(self, '_sub_dirstate', None)
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   343
    try:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   344
        lfd = getattr(self, '_large_file_dirstate', False)
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   345
        if sub_dirstate is None and not lfd:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   346
            sub_dirstate = lfutil.openlfdirstate(repo.ui, repo)
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   347
            self._sub_dirstate = sub_dirstate
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   348
        if not lfd:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   349
            assert self._sub_dirstate is not None
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   350
        with orig(self, repo):
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   351
            if sub_dirstate is None:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   352
                yield
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   353
            else:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   354
                with sub_dirstate.running_status(repo):
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   355
                    yield
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   356
    finally:
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   357
        self._sub_dirstate = pre
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   358
308aff0243ae large-files: also open the context in the subdirstate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50141
diff changeset
   359
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   360
@eh.wrapfunction(subrepo.hgsubrepo, 'status')
16515
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
   361
def overridestatusfn(orig, repo, rev2, **opts):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
   362
    with lfstatus(repo._repo):
16515
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
   363
        return orig(repo, rev2, **opts)
12dabc22de77 largefiles: fix status -S reporting of subrepos (issue3231)
Matt Harbison <matt_harbison@yahoo.com>
parents: 16449
diff changeset
   364
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   365
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   366
@eh.wrapcommand(b'status')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
   367
def overridestatus(orig, ui, repo, *pats, **opts):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
   368
    with lfstatus(repo):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   369
        return orig(ui, repo, *pats, **opts)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   370
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   371
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   372
@eh.wrapfunction(subrepo.hgsubrepo, 'dirty')
33364
bf2daeddd42b subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents: 32945
diff changeset
   373
def overridedirty(orig, repo, ignoreupdate=False, missing=False):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
   374
    with lfstatus(repo._repo):
33364
bf2daeddd42b subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents: 32945
diff changeset
   375
        return orig(repo, ignoreupdate=ignoreupdate, missing=missing)
16516
597ddcb41b32 largefiles: notice dirty large files in a subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 16515
diff changeset
   376
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   377
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   378
@eh.wrapcommand(b'log')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
   379
def overridelog(orig, ui, repo, *pats, **opts):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   380
    def overridematchandpats(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   381
        orig,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   382
        ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   383
        pats=(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   384
        opts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   385
        globbed=False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   386
        default=b'relpath',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   387
        badfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   388
    ):
18341
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   389
        """Matcher that merges root directory with .hglf, suitable for log.
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   390
        It is still possible to match .hglf directly.
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   391
        For any listed files run log on the standin too.
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   392
        matchfn tries both the given filename and with .hglf stripped.
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   393
        """
26339
4afdd4283d3e largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26338
diff changeset
   394
        if opts is None:
4afdd4283d3e largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26338
diff changeset
   395
            opts = {}
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
   396
        matchandpats = orig(ctx, pats, opts, globbed, default, badfn=badfn)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
   397
        m, p = copy.copy(matchandpats)
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
   398
22170
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
   399
        if m.always():
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
   400
            # We want to match everything anyway, so there's no benefit trying
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
   401
            # to add standins.
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
   402
            return matchandpats
0e1b02f984c7 largefiles: don't override matchandpats for always matchers (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22169
diff changeset
   403
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
   404
        pats = set(p)
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
   405
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
   406
        def fixpats(pat, tostandin=lfutil.standin):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   407
            if pat.startswith(b'set:'):
24813
2553ef7355ab largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 24812
diff changeset
   408
                return pat
2553ef7355ab largefiles: don't mangle filesets when fixing up the log matcher
Matt Harbison <matt_harbison@yahoo.com>
parents: 24812
diff changeset
   409
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
   410
            kindpat = matchmod._patsplit(pat, None)
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
   411
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
   412
            if kindpat[0] is not None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   413
                return kindpat[0] + b':' + tostandin(kindpat[1])
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
   414
            return tostandin(kindpat[1])
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
   415
41667
8fa1a5fb8a28 largefiles: get cwd and relative paths from repo instead of matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 41654
diff changeset
   416
        cwd = repo.getcwd()
8fa1a5fb8a28 largefiles: get cwd and relative paths from repo instead of matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 41654
diff changeset
   417
        if cwd:
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
   418
            hglf = lfutil.shortname
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   419
            back = util.pconvert(repo.pathto(hglf)[: -len(hglf)])
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
   420
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
   421
            def tostandin(f):
26781
1aee2ab0f902 spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents: 26607
diff changeset
   422
                # The file may already be a standin, so truncate the back
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
   423
                # prefix and test before mangling it.  This avoids turning
24207
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
   424
                # 'glob:../.hglf/foo*' into 'glob:../.hglf/../.hglf/foo*'.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   425
                if f.startswith(back) and lfutil.splitstandin(f[len(back) :]):
24207
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
   426
                    return f
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
   427
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
   428
                # An absolute path is from outside the repo, so truncate the
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
   429
                # path to the root before building the standin.  Otherwise cwd
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
   430
                # is somewhere in the repo, relative to root, and needs to be
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
   431
                # prepended before building the standin.
41667
8fa1a5fb8a28 largefiles: get cwd and relative paths from repo instead of matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 41654
diff changeset
   432
                if os.path.isabs(cwd):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   433
                    f = f[len(back) :]
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
   434
                else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   435
                    f = cwd + b'/' + f
24208
e6b0de02a02e largefiles: handle logging from outside the repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24207
diff changeset
   436
                return back + lfutil.standin(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   437
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
   438
        else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   439
24207
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
   440
            def tostandin(f):
31614
d5d0e6ca62ad largefiles: replace splitstandin() by isstandin() to omit str creation
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31613
diff changeset
   441
                if lfutil.isstandin(f):
24207
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
   442
                    return f
d90e3faf96a9 largefiles: don't prefix standin patterns with '.hglf' when logging
Matt Harbison <matt_harbison@yahoo.com>
parents: 24206
diff changeset
   443
                return lfutil.standin(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   444
32301
8a87bfc5bebb largefiles: move identical statement to after if/else
Martin von Zweigbergk <martinvonz@google.com>
parents: 32157
diff changeset
   445
        pats.update(fixpats(f, tostandin) for f in p)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
   446
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
   447
        m._was_tampered_with = True
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
   448
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
   449
        for i in range(0, len(m._files)):
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
   450
            # Don't add '.hglf' to m.files, since that is already covered by '.'
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   451
            if m._files[i] == b'.':
24206
13c1e66f9653 largefiles: teach log to handle patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 24172
diff changeset
   452
                continue
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
   453
            standin = lfutil.standin(m._files[i])
23976
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23893
diff changeset
   454
            # If the "standin" is a directory, append instead of replace to
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23893
diff changeset
   455
            # support naming a directory on the command line with only
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23893
diff changeset
   456
            # largefiles.  The original directory is kept to support normal
344939126579 largefiles: don't interfere with logging normal files
Matt Harbison <matt_harbison@yahoo.com>
parents: 23893
diff changeset
   457
            # files.
31655
9d075911df49 largefiles: avoid meaningless changectx looking up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31654
diff changeset
   458
            if standin in ctx:
19472
32e502b26983 largefiles: overridematch() should replace the file path instead of extending (issue3934)
Wei, Elson <elson.wei@gmail.com>
parents: 19226
diff changeset
   459
                m._files[i] = standin
31655
9d075911df49 largefiles: avoid meaningless changectx looking up
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31654
diff changeset
   460
            elif m._files[i] not in ctx and repo.wvfs.isdir(standin):
21275
c7e9fb881a5a largefiles: include largefiles when doing log on a directory (issue4241)
Mads Kiilerich <madski@unity3d.com>
parents: 21209
diff changeset
   461
                m._files.append(standin)
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
   462
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
   463
        m._fileset = set(m._files)
32388
4a23cdb32968 largefiles: replace always() method, not _always field
Martin von Zweigbergk <martinvonz@google.com>
parents: 32382
diff changeset
   464
        m.always = lambda: False
18341
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   465
        origmatchfn = m.matchfn
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   466
18341
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   467
        def lfmatchfn(f):
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   468
            lf = lfutil.splitstandin(f)
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   469
            if lf is not None and origmatchfn(lf):
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   470
                return True
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   471
            r = origmatchfn(f)
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   472
            return r
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   473
18341
ed23d6100dd3 largefiles: make log match largefiles in the non-standin location too
Mads Kiilerich <mads@kiilerich.com>
parents: 18154
diff changeset
   474
        m.matchfn = lfmatchfn
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
   475
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   476
        ui.debug(b'updated patterns: %s\n' % b', '.join(sorted(pats)))
21110
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
   477
        return m, pats
49e13e76ec5a largefiles: changed overridelog to work with graphlog
Lucas Moscovicz <lmoscovicz@fb.com>
parents: 21096
diff changeset
   478
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
   479
    # For hg log --patch, the match object is used in two different senses:
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
   480
    # (1) to determine what revisions should be printed out, and
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
   481
    # (2) to determine what files to print out diffs for.
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
   482
    # The magic matchandpats override should be used for case (1) but not for
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
   483
    # case (2).
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
   484
    oldmatchandpats = scmutil.matchandpats
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   485
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
   486
    def overridemakefilematcher(orig, repo, pats, opts, badfn=None):
24534
1925769b4ff8 log: prefer 'wctx' over 'pctx' for working context
Martin von Zweigbergk <martinvonz@google.com>
parents: 24474
diff changeset
   487
        wctx = repo[None]
25467
f64dbe06f3d0 scmutil: add an optional parameter to matcher factories for a bad() override
Matt Harbison <matt_harbison@yahoo.com>
parents: 25440
diff changeset
   488
        match, pats = oldmatchandpats(wctx, pats, opts, badfn=badfn)
36002
f8ad57d24252 log: pass ctx to makefilematcher() and makehunksfilter() functions
Yuya Nishihara <yuya@tcha.org>
parents: 35887
diff changeset
   489
        return lambda ctx: match
22169
35cc5b07b3fc largefiles: in overridelog, use non-lf matcher for patch generation (issue4334)
Siddharth Agarwal <sid0@fb.com>
parents: 22168
diff changeset
   490
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   491
    wrappedmatchandpats = extensions.wrappedfunction(
50787
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
   492
        scmutil, 'matchandpats', overridematchandpats
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   493
    )
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
   494
    wrappedmakefilematcher = extensions.wrappedfunction(
50787
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
   495
        logcmdutil, '_makenofollowfilematcher', overridemakefilematcher
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   496
    )
41578
8d1dc380b026 largefiles: use wrappedfunction() for matchandpats() override in overridelog()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
   497
    with wrappedmatchandpats, wrappedmakefilematcher:
17577
0f39e9355d3c largefiles: preserve the exit status of the log command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17576
diff changeset
   498
        return orig(ui, repo, *pats, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   499
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   500
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   501
@eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   502
    b'verify',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   503
    opts=[
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   504
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   505
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   506
            b'large',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   507
            None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   508
            _(b'verify that all largefiles in current revision exists'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   509
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   510
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   511
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   512
            b'lfa',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   513
            None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   514
            _(b'verify largefiles in all revisions, not just current'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   515
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   516
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   517
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   518
            b'lfc',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   519
            None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   520
            _(b'verify local largefile contents, not just existence'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   521
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   522
    ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   523
)
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
   524
def overrideverify(orig, ui, repo, *pats, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
   525
    large = opts.pop('large', False)
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
   526
    all = opts.pop('lfa', False)
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
   527
    contents = opts.pop('lfc', False)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   528
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   529
    result = orig(ui, repo, *pats, **opts)
18547
2e3ec9e6ee6e largefiles: make verify --lfa and --lfc work without --large
Mads Kiilerich <madski@unity3d.com>
parents: 18541
diff changeset
   530
    if large or all or contents:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   531
        result = result or lfcommands.verifylfiles(ui, repo, all, contents)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   532
    return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   533
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   534
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   535
@eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   536
    b'debugstate',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   537
    opts=[(b'', b'large', None, _(b'display largefiles dirstate'))],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   538
)
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
   539
def overridedebugstate(orig, ui, repo, *pats, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
   540
    large = opts.pop('large', False)
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
   541
    if large:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   542
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48913
diff changeset
   543
        class fakerepo:
21088
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
   544
            dirstate = lfutil.openlfdirstate(ui, repo)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   545
21088
e095626e8676 largefiles: full debugdirstate functionality for largefiles
Mads Kiilerich <madski@unity3d.com>
parents: 21087
diff changeset
   546
        orig(ui, fakerepo, *pats, **opts)
18144
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
   547
    else:
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
   548
        orig(ui, repo, *pats, **opts)
e16982a74bf7 largefiles: introduce basic debugstate --large functionality
Mads Kiilerich <madski@unity3d.com>
parents: 18142
diff changeset
   549
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   550
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   551
# Before starting the manifest merge, merge.updates will call
23543
4dd8a6a1240d spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23541
diff changeset
   552
# _checkunknownfile to check if there are any files in the merged-in
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   553
# changeset that collide with unknown files in the working copy.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   554
#
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   555
# The largefiles are seen as unknown, so this prevents us from merging
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   556
# in a file 'foo' if we already have a largefile with the same name.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   557
#
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   558
# The overridden function filters the unknown files by removing any
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   559
# largefiles. This makes the merge proceed and we can then handle this
23307
9dd0d0d61a24 largefiles: update comments to refer to the right overridden method
Martin von Zweigbergk <martinvonz@google.com>
parents: 23276
diff changeset
   560
# case further in the overridden calculateupdates function below.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   561
@eh.wrapfunction(merge, '_checkunknownfile')
49910
7b474609f199 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49854
diff changeset
   562
def overridecheckunknownfile(
7b474609f199 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49854
diff changeset
   563
    origfn, dirstate, wvfs, dircache, wctx, mctx, f, f2=None
7b474609f199 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49854
diff changeset
   564
):
7b474609f199 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49854
diff changeset
   565
    if lfutil.standin(dirstate.normalize(f)) in wctx:
16093
7e30f5f2285f merge: refactor unknown file conflict checking
Matt Mackall <mpm@selenic.com>
parents: 16075
diff changeset
   566
        return False
49910
7b474609f199 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49854
diff changeset
   567
    return origfn(dirstate, wvfs, dircache, wctx, mctx, f, f2)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   568
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   569
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   570
# The manifest merge handles conflicts on the manifest level. We want
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   571
# to handle changes in largefile-ness of files at this level too.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   572
#
23307
9dd0d0d61a24 largefiles: update comments to refer to the right overridden method
Martin von Zweigbergk <martinvonz@google.com>
parents: 23276
diff changeset
   573
# The strategy is to run the original calculateupdates and then process
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   574
# the action list it outputs. There are two cases we need to deal with:
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   575
#
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   576
# 1. Normal file in p1, largefile in p2. Here the largefile is
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   577
#    detected via its standin file, which will enter the working copy
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   578
#    with a "get" action. It is not "merge" since the standin is all
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   579
#    Mercurial is concerned with at this level -- the link to the
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   580
#    existing normal file is not relevant here.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   581
#
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   582
# 2. Largefile in p1, normal file in p2. Here we get a "merge" action
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   583
#    since the largefile will be present in the working copy and
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   584
#    different from the normal file in p2. Mercurial therefore
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   585
#    triggers a merge action.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   586
#
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   587
# In both cases, we prompt the user and emit new actions to either
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   588
# remove the standin (if the normal file was kept) or to remove the
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   589
# normal file and get the standin (if the largefile was kept). The
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   590
# default prompt answer is to use the largefile version since it was
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   591
# presumably changed on purpose.
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   592
#
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   593
# Finally, the merge.applyupdates function will then take care of
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   594
# writing the files into the working copy and lfcommands.updatelfiles
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   595
# will update the largefiles.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   596
@eh.wrapfunction(merge, 'calculateupdates')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   597
def overridecalculateupdates(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   598
    origfn, repo, p1, p2, pas, branchmerge, force, acceptremote, *args, **kwargs
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   599
):
18605
bcf29565d89f manifestmerge: pass in branchmerge and force separately
Siddharth Agarwal <sid0@fb.com>
parents: 18600
diff changeset
   600
    overwrite = force and not branchmerge
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
   601
    mresult = origfn(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   602
        repo, p1, p2, pas, branchmerge, force, acceptremote, *args, **kwargs
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   603
    )
19952
8eb99e5cec4a largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents: 19805
diff changeset
   604
8eb99e5cec4a largefiles: don't process merge actions at all when overwriting
Mads Kiilerich <madski@unity3d.com>
parents: 19805
diff changeset
   605
    if overwrite:
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
   606
        return mresult
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   607
23529
38e55e55ae4d largefiles: rewrite merge code using dictionary with entry per file
Martin von Zweigbergk <martinvonz@google.com>
parents: 23528
diff changeset
   608
    # Convert to dictionary with filename as key and action as value.
23530
42ae1b1f048f largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents: 23529
diff changeset
   609
    lfiles = set()
45345
e5b4061f32be mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45344
diff changeset
   610
    for f in mresult.files():
27905
27f2f5c1d499 largefiles: actions will now always have a file - drop check
Mads Kiilerich <madski@unity3d.com>
parents: 27904
diff changeset
   611
        splitstandin = lfutil.splitstandin(f)
42755
749ef8c31187 rust-dirstate: call rust dirstatemap from Python
Raphaël Gomès <rgomes@octobus.net>
parents: 42587
diff changeset
   612
        if splitstandin is not None and splitstandin in p1:
23641
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23635
diff changeset
   613
            lfiles.add(splitstandin)
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23635
diff changeset
   614
        elif lfutil.standin(f) in p1:
a7a0f32a383f merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents: 23635
diff changeset
   615
            lfiles.add(f)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   616
27904
ee3123e19db9 largefiles: make prompt order deterministic
Mads Kiilerich <madski@unity3d.com>
parents: 27826
diff changeset
   617
    for lfile in sorted(lfiles):
23530
42ae1b1f048f largefiles: start by finding files of interest
Martin von Zweigbergk <martinvonz@google.com>
parents: 23529
diff changeset
   618
        standin = lfutil.standin(lfile)
45344
4c6004afd836 mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45298
diff changeset
   619
        (lm, largs, lmsg) = mresult.getfile(lfile, (None, None, None))
4c6004afd836 mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45298
diff changeset
   620
        (sm, sargs, smsg) = mresult.getfile(standin, (None, None, None))
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   621
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   622
        if sm in (ACTION_GET, ACTION_DELETED_CHANGED) and lm != ACTION_REMOVE:
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   623
            if sm == ACTION_DELETED_CHANGED:
26962
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 26781
diff changeset
   624
                f1, f2, fa, move, anc = sargs
27655
af13eaf9ab8c merge: add a new 'backup' argument to get actions
Siddharth Agarwal <sid0@fb.com>
parents: 27586
diff changeset
   625
                sargs = (p2[f2].flags(), False)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   626
            # Case 1: normal file in the working copy, largefile in
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   627
            # the second parent
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   628
            usermsg = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   629
                _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   630
                    b'remote turned local normal file %s into a largefile\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   631
                    b'use (l)argefile or keep (n)ormal file?'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   632
                    b'$$ &Largefile $$ &Normal file'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   633
                )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   634
                % lfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   635
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   636
            if repo.ui.promptchoice(usermsg, 0) == 0:  # pick remote largefile
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   637
                mresult.addfile(
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   638
                    lfile, ACTION_REMOVE, None, b'replaced by standin'
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   639
                )
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   640
                mresult.addfile(standin, ACTION_GET, sargs, b'replaces standin')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   641
            else:  # keep local normal file
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   642
                mresult.addfile(lfile, ACTION_KEEP, None, b'replaces standin')
23493
28f01c318c05 largefiles: don't use 'r' action for standin that doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents: 23492
diff changeset
   643
                if branchmerge:
45282
b442920ab1de merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45274
diff changeset
   644
                    mresult.addfile(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   645
                        standin,
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   646
                        ACTION_KEEP,
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   647
                        None,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   648
                        b'replaced by non-standin',
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
   649
                    )
23493
28f01c318c05 largefiles: don't use 'r' action for standin that doesn't exist
Martin von Zweigbergk <martinvonz@google.com>
parents: 23492
diff changeset
   650
                else:
45282
b442920ab1de merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45274
diff changeset
   651
                    mresult.addfile(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   652
                        standin,
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   653
                        ACTION_REMOVE,
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   654
                        None,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   655
                        b'replaced by non-standin',
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
   656
                    )
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   657
        if lm in (ACTION_GET, ACTION_DELETED_CHANGED) and sm != ACTION_REMOVE:
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   658
            if lm == ACTION_DELETED_CHANGED:
26962
fa2daf0e61ab merge: make 'cd' and 'dc' actions store the same arguments as 'm'
Siddharth Agarwal <sid0@fb.com>
parents: 26781
diff changeset
   659
                f1, f2, fa, move, anc = largs
27655
af13eaf9ab8c merge: add a new 'backup' argument to get actions
Siddharth Agarwal <sid0@fb.com>
parents: 27586
diff changeset
   660
                largs = (p2[f2].flags(), False)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   661
            # Case 2: largefile in the working copy, normal file in
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   662
            # the second parent
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   663
            usermsg = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   664
                _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   665
                    b'remote turned local largefile %s into a normal file\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   666
                    b'keep (l)argefile or use (n)ormal file?'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   667
                    b'$$ &Largefile $$ &Normal file'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   668
                )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   669
                % lfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   670
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   671
            if repo.ui.promptchoice(usermsg, 0) == 0:  # keep local largefile
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
   672
                if branchmerge:
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
   673
                    # largefile can be restored from standin safely
45282
b442920ab1de merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45274
diff changeset
   674
                    mresult.addfile(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   675
                        lfile,
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   676
                        ACTION_KEEP,
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   677
                        None,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   678
                        b'replaced by standin',
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
   679
                    )
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   680
                    mresult.addfile(
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   681
                        standin, ACTION_KEEP, None, b'replaces standin'
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   682
                    )
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
   683
                else:
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
   684
                    # "lfile" should be marked as "removed" without
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
   685
                    # removal of itself
45282
b442920ab1de merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45274
diff changeset
   686
                    mresult.addfile(
45298
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
   687
                        lfile,
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
   688
                        MERGE_ACTION_LARGEFILE_MARK_REMOVED,
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
   689
                        None,
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
   690
                        b'forget non-standin largefile',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   691
                    )
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
   692
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
   693
                    # linear-merge should treat this largefile as 're-added'
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   694
                    mresult.addfile(standin, ACTION_ADD, None, b'keep standin')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   695
            else:  # pick remote normal file
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   696
                mresult.addfile(lfile, ACTION_GET, largs, b'replaces standin')
45282
b442920ab1de merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45274
diff changeset
   697
                mresult.addfile(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   698
                    standin,
48709
d536d4afe003 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48506
diff changeset
   699
                    ACTION_REMOVE,
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   700
                    None,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45682
diff changeset
   701
                    b'replaced by non-standin',
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
   702
                )
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   703
45274
0e18861f96ab merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
   704
    return mresult
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15598
diff changeset
   705
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   706
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   707
@eh.wrapfunction(mergestatemod, 'recordupdates')
42456
87a34c767384 merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 41760
diff changeset
   708
def mergerecordupdates(orig, repo, actions, branchmerge, getfiledata):
45298
a3cd63d6005b largefiles: introduce a constant for 'lfmr' action
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45297
diff changeset
   709
    if MERGE_ACTION_LARGEFILE_MARK_REMOVED in actions:
23695
997a96cf6344 largefiles: mark lfile as added in lfdirstate when the standin is added
Mads Kiilerich <madski@unity3d.com>
parents: 23619
diff changeset
   710
        lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
50048
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
   711
        for lfile, args, msg in actions[MERGE_ACTION_LARGEFILE_MARK_REMOVED]:
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
   712
            # this should be executed before 'orig', to execute 'remove'
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
   713
            # before all other actions
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
   714
            repo.dirstate.update_file(lfile, p1_tracked=True, wc_tracked=False)
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
   715
            # make sure lfile doesn't get synclfdirstate'd as normal
c3c8ac540513 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50029
diff changeset
   716
            lfdirstate.update_file(lfile, p1_tracked=False, wc_tracked=True)
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
   717
42456
87a34c767384 merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 41760
diff changeset
   718
    return orig(repo, actions, branchmerge, getfiledata)
22196
23fe278bde43 largefiles: keep largefiles from colliding with normal one during linear merge
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22194
diff changeset
   719
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   720
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
   721
# Override filemerge to prompt the user about how they wish to merge
20295
36333ff8c54d largefiles: drop redundant special handling of merges of renames
Mads Kiilerich <madski@unity3d.com>
parents: 20156
diff changeset
   722
# largefiles. This will handle identical edits without prompting the user.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   723
@eh.wrapfunction(filemerge, 'filemerge')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   724
def overridefilemerge(
48431
6b1049d71c3e filemerge: make `_filemerge()` do both premerge and merge
Martin von Zweigbergk <martinvonz@google.com>
parents: 48390
diff changeset
   725
    origfn, repo, wctx, mynode, orig, fcd, fco, fca, labels=None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   726
):
27050
df9b73d2d444 largefiles: fall back to the original for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents: 27034
diff changeset
   727
    if not lfutil.isstandin(orig) or fcd.isabsent() or fco.isabsent():
48431
6b1049d71c3e filemerge: make `_filemerge()` do both premerge and merge
Martin von Zweigbergk <martinvonz@google.com>
parents: 48390
diff changeset
   728
        return origfn(repo, wctx, mynode, orig, fcd, fco, fca, labels=labels)
20298
9d350fa0708e largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents: 20297
diff changeset
   729
31740
a40e979b9d97 largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31735
diff changeset
   730
    ahash = lfutil.readasstandin(fca).lower()
a40e979b9d97 largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31735
diff changeset
   731
    dhash = lfutil.readasstandin(fcd).lower()
a40e979b9d97 largefiles: use readasstandin() to read hex hash directly from filectx
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31735
diff changeset
   732
    ohash = lfutil.readasstandin(fco).lower()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   733
    if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   734
        ohash != ahash
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   735
        and ohash != dhash
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   736
        and (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   737
            dhash == ahash
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   738
            or repo.ui.promptchoice(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   739
                _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   740
                    b'largefile %s has a merge conflict\nancestor was %s\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   741
                    b'you can keep (l)ocal %s or take (o)ther %s.\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   742
                    b'what do you want to do?'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   743
                    b'$$ &Local $$ &Other'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   744
                )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   745
                % (lfutil.splitstandin(orig), ahash, dhash, ohash),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   746
                0,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   747
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   748
            == 1
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   749
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   750
    ):
20298
9d350fa0708e largefiles: stylistic cleanup of filemerge
Mads Kiilerich <madski@unity3d.com>
parents: 20297
diff changeset
   751
        repo.wwrite(fcd.path(), fco.data(), fco.flags())
48506
608a35db186c filemerge: stop returning always-`True` value
Martin von Zweigbergk <martinvonz@google.com>
parents: 48432
diff changeset
   752
    return 0, False
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   753
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   754
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   755
@eh.wrapfunction(copiesmod, 'pathcopies')
24782
4906dc0e038c copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents: 24680
diff changeset
   756
def copiespathcopies(orig, ctx1, ctx2, match=None):
4906dc0e038c copies: add matcher parameter to copy logic
Durham Goode <durham@fb.com>
parents: 24680
diff changeset
   757
    copies = orig(ctx1, ctx2, match=match)
24230
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
   758
    updated = {}
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
   759
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
   760
    for k, v in copies.items():
24230
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
   761
        updated[lfutil.splitstandin(k) or k] = lfutil.splitstandin(v) or v
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
   762
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
   763
    return updated
23438bceba04 largefiles: report the source of copied/moved largefiles in status -C
Matt Harbison <matt_harbison@yahoo.com>
parents: 24208
diff changeset
   764
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   765
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
   766
# Copy first changes the matchers to match standins instead of
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
   767
# largefiles.  Then it overrides util.copyfile in that function it
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
   768
# checks if the destination largefile already exists. It also keeps a
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
   769
# list of copied files so that the largefiles can be copied and the
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
   770
# dirstate updated.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   771
@eh.wrapfunction(cmdutil, 'copy')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
   772
def overridecopy(orig, ui, repo, pats, opts, rename=False):
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15229
diff changeset
   773
    # doesn't remove largefile on rename
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   774
    if len(pats) < 2:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   775
        # this isn't legal, let the original function deal with it
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   776
        return orig(ui, repo, pats, opts, rename)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   777
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   778
    # This could copy both lfiles and normal files in one command,
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   779
    # but we don't want to do that. First replace their matcher to
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   780
    # only match normal files and run it, then replace it to just
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   781
    # match largefiles and run it again.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   782
    nonormalfiles = False
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   783
    nolfiles = False
41581
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   784
    manifest = repo[None].manifest()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   785
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   786
    def normalfilesmatchfn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   787
        orig,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   788
        ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   789
        pats=(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   790
        opts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   791
        globbed=False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   792
        default=b'relpath',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   793
        badfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   794
    ):
41581
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   795
        if opts is None:
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   796
            opts = {}
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   797
        match = orig(ctx, pats, opts, globbed, default, badfn=badfn)
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   798
        return composenormalfilematcher(match, manifest)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   799
50787
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
   800
    with extensions.wrappedfunction(scmutil, 'match', normalfilesmatchfn):
41581
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   801
        try:
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   802
            result = orig(ui, repo, pats, opts, rename)
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   803
        except error.Abort as e:
45682
d2e1dcd4490d errors: name arguments to Abort constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 45557
diff changeset
   804
            if e.message != _(b'no files to copy'):
41581
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   805
                raise e
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   806
            else:
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   807
                nonormalfiles = True
d9fd2f74d683 largefiles: use wrappedfunction() for "normal files match" in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41580
diff changeset
   808
            result = 0
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   809
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   810
    # The first rename can cause our current working directory to be removed.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   811
    # In that case there is nothing left to copy/rename so just quit.
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   812
    try:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   813
        repo.getcwd()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   814
    except OSError:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   815
        return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   816
24006
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
   817
    def makestandin(relpath):
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
   818
        path = pathutil.canonpath(repo.root, repo.getcwd(), relpath)
28715
a7f7b7acf489 largefiles: replace invocation of os.path module by vfs in overrides.py
liscju <piotr.listkiewicz@gmail.com>
parents: 28394
diff changeset
   819
        return repo.wvfs.join(lfutil.standin(path))
24006
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
   820
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
   821
    fullpats = scmutil.expandpats(pats)
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
   822
    dest = fullpats[-1]
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
   823
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
   824
    if os.path.isdir(dest):
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
   825
        if not os.path.isdir(makestandin(dest)):
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
   826
            os.makedirs(makestandin(dest))
42fa7eeb858e largefiles: use the core file copy logic to validate the destination path
Matt Harbison <matt_harbison@yahoo.com>
parents: 23976
diff changeset
   827
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   828
    try:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   829
        # When we call orig below it creates the standins but we don't add
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   830
        # them to the dir state until later so lock during that time.
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   831
        wlock = repo.wlock()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   832
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   833
        manifest = repo[None].manifest()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   834
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   835
        def overridematch(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   836
            orig,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   837
            ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   838
            pats=(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   839
            opts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   840
            globbed=False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   841
            default=b'relpath',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   842
            badfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   843
        ):
26341
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26340
diff changeset
   844
            if opts is None:
f46e7f3b70af largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26340
diff changeset
   845
                opts = {}
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   846
            newpats = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   847
            # The patterns were previously mangled to add the standin
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   848
            # directory; we need to remove that now
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   849
            for pat in pats:
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
   850
                if matchmod.patkind(pat) is None and lfutil.shortname in pat:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   851
                    newpats.append(pat.replace(lfutil.shortname, b''))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   852
                else:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   853
                    newpats.append(pat)
41580
9f11759fc5f5 largefiles: use wrappedfunction() for match() override in overridecopy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41579
diff changeset
   854
            match = orig(ctx, newpats, opts, globbed, default, badfn=badfn)
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   855
            m = copy.copy(match)
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
   856
            m._was_tampered_with = True
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   857
            lfile = lambda f: lfutil.standin(f) in manifest
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   858
            m._files = [lfutil.standin(f) for f in m._files if lfile(f)]
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
   859
            m._fileset = set(m._files)
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   860
            origmatchfn = m.matchfn
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   861
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
   862
            def matchfn(f):
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
   863
                lfile = lfutil.splitstandin(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   864
                return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   865
                    lfile is not None
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   866
                    and (f in manifest)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   867
                    and origmatchfn(lfile)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   868
                    or None
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   869
                )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   870
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
   871
            m.matchfn = matchfn
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   872
            return m
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   873
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   874
        listpats = []
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   875
        for pat in pats:
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
   876
            if matchmod.patkind(pat) is not None:
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   877
                listpats.append(pat)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   878
            else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   879
                listpats.append(makestandin(pat))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   880
41579
028bb170e74d largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 41578
diff changeset
   881
        copiedfiles = []
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   882
41579
028bb170e74d largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 41578
diff changeset
   883
        def overridecopyfile(orig, src, dest, *args, **kwargs):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   884
            if lfutil.shortname in src and dest.startswith(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   885
                repo.wjoin(lfutil.shortname)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   886
            ):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   887
                destlfile = dest.replace(lfutil.shortname, b'')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   888
                if not opts[b'force'] and os.path.exists(destlfile):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   889
                    raise IOError(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   890
                        b'', _(b'destination largefile already exists')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   891
                    )
41579
028bb170e74d largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 41578
diff changeset
   892
            copiedfiles.append((src, dest))
028bb170e74d largefiles: use wrappedfunction() for util.copyfile() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 41578
diff changeset
   893
            orig(src, dest, *args, **kwargs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   894
50787
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
   895
        with extensions.wrappedfunction(util, 'copyfile', overridecopyfile):
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
   896
            with extensions.wrappedfunction(scmutil, 'match', overridematch):
41760
1eb2fc21da12 cleanup: prefer nested context managers to \-continuations
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
   897
                result += orig(ui, repo, listpats, opts, rename)
21196
5c0d5b95b824 largefiles: remove directories emptied after their files are moved (issue3515)
Matt Harbison <matt_harbison@yahoo.com>
parents: 21110
diff changeset
   898
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   899
        lfdirstate = lfutil.openlfdirstate(ui, repo)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   900
        for (src, dest) in copiedfiles:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   901
            if lfutil.shortname in src and dest.startswith(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   902
                repo.wjoin(lfutil.shortname)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   903
            ):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   904
                srclfile = src.replace(repo.wjoin(lfutil.standin(b'')), b'')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   905
                destlfile = dest.replace(repo.wjoin(lfutil.standin(b'')), b'')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   906
                destlfiledir = repo.wvfs.dirname(repo.wjoin(destlfile)) or b'.'
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   907
                if not os.path.isdir(destlfiledir):
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   908
                    os.makedirs(destlfiledir)
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   909
                if rename:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   910
                    os.rename(repo.wjoin(srclfile), repo.wjoin(destlfile))
17245
6e84171a61c8 largefiles: fix path handling for cp/mv (issue3516)
Matt Harbison <matt_harbison@yahoo.com>
parents: 17232
diff changeset
   911
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   912
                    # The file is gone, but this deletes any empty parent
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   913
                    # directories as a side-effect.
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
   914
                    repo.wvfs.unlinkpath(srclfile, ignoremissing=True)
47655
0ab58b1f228f largefile: use `set_untracked` in the override of copy/rename
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47654
diff changeset
   915
                    lfdirstate.set_untracked(srclfile)
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   916
                else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   917
                    util.copyfile(repo.wjoin(srclfile), repo.wjoin(destlfile))
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   918
47650
1e5a9783bba8 largefile: use `set_tracked` in the `hg copy` overwrite
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47649
diff changeset
   919
                lfdirstate.set_tracked(destlfile)
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
   920
        lfdirstate.write(repo.currenttransaction())
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
   921
    except error.Abort as e:
45682
d2e1dcd4490d errors: name arguments to Abort constructor
Martin von Zweigbergk <martinvonz@google.com>
parents: 45557
diff changeset
   922
        if e.message != _(b'no files to copy'):
25079
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   923
            raise e
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   924
        else:
bee00e0c2e45 largefiles: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24954
diff changeset
   925
            nolfiles = True
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   926
    finally:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   927
        wlock.release()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   928
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   929
    if nolfiles and nonormalfiles:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   930
        raise error.Abort(_(b'no files to copy'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   931
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   932
    return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   933
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   934
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   935
# When the user calls revert, we have to be careful to not revert any
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   936
# changes to other largefiles accidentally. This means we have to keep
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   937
# track of the largefiles that are being reverted so we only pull down
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   938
# the necessary largefiles.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   939
#
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   940
# Standins are only updated (to match the hash of largefiles) before
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   941
# commits. Update the standins then run the original revert, changing
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   942
# the matcher to hit standins instead of largefiles. Based on the
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
   943
# resulting standins update the largefiles.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
   944
@eh.wrapfunction(cmdutil, 'revert')
45375
8c466bcb0879 revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45348
diff changeset
   945
def overriderevert(orig, ui, repo, ctx, *pats, **opts):
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   946
    # Because we put the standins in a bad state (by updating them)
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   947
    # and then return them to a correct state we need to lock to
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
   948
    # prevent others from changing them in their incorrect state.
50138
270dc01481af large-files: use `running_status` in `overriderevert`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50103
diff changeset
   949
    with repo.wlock(), repo.dirstate.running_status(repo):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   950
        lfdirstate = lfutil.openlfdirstate(ui, repo)
23039
1350b9170089 largefiles: remove confusing rev parameter for lfdirstatestatus
Mads Kiilerich <madski@unity3d.com>
parents: 23038
diff changeset
   951
        s = lfutil.lfdirstatestatus(lfdirstate, repo)
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
   952
        lfdirstate.write(repo.currenttransaction())
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
   953
        for lfile in s.modified:
31659
0eec36112e58 largefiles: add lfile argument to updatestandin() for efficiency (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31656
diff changeset
   954
            lfutil.updatestandin(repo, lfile, lfutil.standin(lfile))
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
   955
        for lfile in s.deleted:
31618
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
   956
            fstandin = lfutil.standin(lfile)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   957
            if repo.wvfs.exists(fstandin):
31618
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
   958
                repo.wvfs.unlink(fstandin)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   959
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
   960
        oldstandins = lfutil.getstandinsstate(repo)
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
   961
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   962
        def overridematch(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   963
            orig,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   964
            mctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   965
            pats=(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   966
            opts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   967
            globbed=False,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   968
            default=b'relpath',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   969
            badfn=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   970
        ):
26343
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26342
diff changeset
   971
            if opts is None:
019559aa2e80 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26342
diff changeset
   972
                opts = {}
41582
7b2580e0dbbd largefiles: use wrappedfunction() in overriderevert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41581
diff changeset
   973
            match = orig(mctx, pats, opts, globbed, default, badfn=badfn)
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
   974
            m = copy.copy(match)
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
   975
            m._was_tampered_with = True
24133
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
   976
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
   977
            # revert supports recursing into subrepos, and though largefiles
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
   978
            # currently doesn't work correctly in that case, this match is
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
   979
            # called, so the lfdirstate above may not be the correct one for
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
   980
            # this invocation of match.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   981
            lfdirstate = lfutil.openlfdirstate(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   982
                mctx.repo().ui, mctx.repo(), False
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   983
            )
24133
79c2c29c71ae largefiles: don't warn when reverting a forgotten largefile
Matt Harbison <matt_harbison@yahoo.com>
parents: 24029
diff changeset
   984
31654
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31653
diff changeset
   985
            wctx = repo[None]
31656
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
   986
            matchfiles = []
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
   987
            for f in m._files:
24437
2703eb73a3af largefiles: extract and reuse 'standin' variable in overriderevert()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24436
diff changeset
   988
                standin = lfutil.standin(f)
24438
5b85a5bc5bbb revert: evaluate filesets against working directory (issue4497)
Martin von Zweigbergk <martinvonz@google.com>
parents: 24437
diff changeset
   989
                if standin in ctx or standin in mctx:
31656
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
   990
                    matchfiles.append(standin)
48106
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
   991
                elif standin in wctx or lfdirstate.get_entry(f).removed:
31656
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
   992
                    continue
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
   993
                else:
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
   994
                    matchfiles.append(f)
0192aa8626c1 largefiles: avoid redundant loop to eliminate None from list
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31655
diff changeset
   995
            m._files = matchfiles
32322
23c9a2a71c6e match: make _fileroots a @propertycache and rename it to _fileset
Martin von Zweigbergk <martinvonz@google.com>
parents: 32308
diff changeset
   996
            m._fileset = set(m._files)
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
   997
            origmatchfn = m.matchfn
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
   998
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
   999
            def matchfn(f):
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1000
                lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1001
                if lfile is not None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1002
                    return origmatchfn(lfile) and (f in ctx or f in mctx)
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
  1003
                return origmatchfn(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1004
21095
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
  1005
            m.matchfn = matchfn
ec309395aa45 largefiles: revert override, install matchfn outside the try/except restoring it
Mads Kiilerich <madski@unity3d.com>
parents: 21094
diff changeset
  1006
            return m
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1007
50787
584fc92dd8d7 wrapfunction: use sysstr instead of bytes as argument in "narrow"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50785
diff changeset
  1008
        with extensions.wrappedfunction(scmutil, 'match', overridematch):
45375
8c466bcb0879 revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents: 45348
diff changeset
  1009
            orig(ui, repo, ctx, *pats, **opts)
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
  1010
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
  1011
        newstandins = lfutil.getstandinsstate(repo)
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
  1012
        filelist = lfutil.getlfilestoupdate(oldstandins, newstandins)
21934
0cb34b3991f8 largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21884
diff changeset
  1013
        # lfdirstate should be 'normallookup'-ed for updated files,
0cb34b3991f8 largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21884
diff changeset
  1014
        # because reverting doesn't touch dirstate for 'normal' files
0cb34b3991f8 largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21884
diff changeset
  1015
        # when target revision is explicitly specified: in such case,
0cb34b3991f8 largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21884
diff changeset
  1016
        # 'n' and valid timestamp in dirstate doesn't ensure 'clean'
0cb34b3991f8 largefiles: use "normallookup" on "lfdirstate" while reverting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21884
diff changeset
  1017
        # of target (standin) file.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1018
        lfcommands.updatelfiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1019
            ui, repo, filelist, printmessage=False, normallookup=True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1020
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1021
21094
4643bfec2485 largefiles: simplify revert - use getstandinsstate like other commands do
Mads Kiilerich <madski@unity3d.com>
parents: 21093
diff changeset
  1022
23183
51c9196a6bd0 largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23145
diff changeset
  1023
# after pulling changesets, we need to take some extra care to get
51c9196a6bd0 largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23145
diff changeset
  1024
# largefiles updated remotely
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1025
@eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1026
    b'pull',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1027
    opts=[
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1028
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1029
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1030
            b'all-largefiles',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1031
            None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1032
            _(b'download all pulled versions of largefiles (DEPRECATED)'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1033
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1034
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1035
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1036
            b'lfrev',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1037
            [],
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1038
            _(b'download largefiles for these revisions'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1039
            _(b'REV'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1040
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1041
    ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1042
)
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
  1043
def overridepull(orig, ui, repo, source=None, **opts):
16692
b9969574540a largefiles: add --all-largefiles flag to pull
Na'Tosha Bard <natosha@unity3d.com>
parents: 16691
diff changeset
  1044
    revsprepull = len(repo)
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
  1045
    if not source:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1046
        source = b'default'
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
  1047
    repo.lfpullsource = source
23183
51c9196a6bd0 largefiles: remove meaningless code path for "hg pull --rebase"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23145
diff changeset
  1048
    result = orig(ui, repo, source, **opts)
18977
864232481e76 largefiles: refactor overridepull internals
Mads Kiilerich <madski@unity3d.com>
parents: 18974
diff changeset
  1049
    revspostpull = len(repo)
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
  1050
    lfrevs = opts.get('lfrev', [])
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
  1051
    if opts.get('all_largefiles'):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1052
        lfrevs.append(b'pulled()')
18978
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
  1053
    if lfrevs and revspostpull > revsprepull:
8abaadab9abb largefiles: introduce pull --lfrev option
Mads Kiilerich <madski@unity3d.com>
parents: 18977
diff changeset
  1054
        numcached = 0
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1055
        repo.firstpulled = revsprepull  # for pulled() revset expression
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1056
        try:
48116
5ced12cfa41b errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 48106
diff changeset
  1057
            for rev in logcmdutil.revrange(repo, lfrevs):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1058
                ui.note(_(b'pulling largefiles for revision %d\n') % rev)
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1059
                (cached, missing) = lfcommands.cachelfiles(ui, repo, rev)
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1060
                numcached += len(cached)
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1061
        finally:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1062
            del repo.firstpulled
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1063
        ui.status(_(b"%d largefiles cached\n") % numcached)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1064
    return result
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1065
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1066
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1067
@eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1068
    b'push',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1069
    opts=[
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1070
        (
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1071
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1072
            b'lfrev',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1073
            [],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1074
            _(b'upload largefiles for these revisions'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1075
            _(b'REV'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1076
        )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1077
    ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1078
)
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1079
def overridepush(orig, ui, repo, *args, **kwargs):
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1080
    """Override push command and store --lfrev parameters in opargs"""
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
  1081
    lfrevs = kwargs.pop('lfrev', None)
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1082
    if lfrevs:
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
  1083
        opargs = kwargs.setdefault('opargs', {})
48116
5ced12cfa41b errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 48106
diff changeset
  1084
        opargs[b'lfrevs'] = logcmdutil.revrange(repo, lfrevs)
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1085
    return orig(ui, repo, *args, **kwargs)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1086
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1087
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1088
@eh.wrapfunction(exchange, 'pushoperation')
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1089
def exchangepushoperation(orig, *args, **kwargs):
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1090
    """Override pushoperation constructor and store lfrevs parameter"""
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
  1091
    lfrevs = kwargs.pop('lfrevs', None)
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1092
    pushop = orig(*args, **kwargs)
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1093
    pushop.lfrevs = lfrevs
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1094
    return pushop
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28715
diff changeset
  1095
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1096
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1097
@eh.revsetpredicate(b'pulled()')
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1098
def pulledrevsetsymbol(repo, subset, x):
27586
42910f9fffeb revset: use delayregistrar to register predicate in extension easily
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27345
diff changeset
  1099
    """Changesets that just has been pulled.
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1100
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1101
    Only available with largefiles from pull --lfrev expressions.
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1102
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1103
    .. container:: verbose
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1104
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1105
      Some examples:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1106
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1107
      - pull largefiles for all new changesets::
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1108
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1109
          hg pull -lfrev "pulled()"
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1110
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1111
      - pull largefiles for all new branch heads::
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1112
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1113
          hg pull -lfrev "head(pulled()) and not closed()"
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1114
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1115
    """
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1116
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1117
    try:
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1118
        firstpulled = repo.firstpulled
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1119
    except AttributeError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1120
        raise error.Abort(_(b"pulled() only available in --lfrev"))
31023
aea06029919e revset: import set classes directly from smartset module
Yuya Nishihara <yuya@tcha.org>
parents: 30215
diff changeset
  1121
    return smartset.baseset([r for r in subset if r >= firstpulled])
18979
1176832fc757 largefiles: introduce pulled() revset expression for use in --lfrev
Mads Kiilerich <madski@unity3d.com>
parents: 18978
diff changeset
  1122
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1123
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1124
@eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1125
    b'clone',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1126
    opts=[
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1127
        (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1128
            b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1129
            b'all-largefiles',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1130
            None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1131
            _(b'download all versions of all largefiles'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1132
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1133
    ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1134
)
16644
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16642
diff changeset
  1135
def overrideclone(orig, ui, source, dest=None, **opts):
17600
3a1c6b64e052 largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17599
diff changeset
  1136
    d = dest
3a1c6b64e052 largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17599
diff changeset
  1137
    if d is None:
3a1c6b64e052 largefiles: don't convert dest=None to dest=hg.defaultdest() in clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17599
diff changeset
  1138
        d = hg.defaultdest(source)
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
  1139
    if opts.get('all_largefiles') and not hg.islocal(d):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1140
        raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1141
            _(b'--all-largefiles is incompatible with non-local destination %s')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1142
            % d
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1143
        )
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
  1144
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
  1145
    return orig(ui, source, dest, **opts)
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
  1146
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1147
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1148
@eh.wrapfunction(hg, 'clone')
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
  1149
def hgclone(orig, ui, opts, *args, **kwargs):
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
  1150
    result = orig(ui, opts, *args, **kwargs)
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
  1151
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
  1152
    if result is not None:
16644
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16642
diff changeset
  1153
        sourcerepo, destrepo = result
17599
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17598
diff changeset
  1154
        repo = destrepo.local()
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17598
diff changeset
  1155
24812
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
  1156
        # When cloning to a remote repo (like through SSH), no repo is available
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
  1157
        # from the peer.   Therefore the largefiles can't be downloaded and the
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
  1158
        # hgrc can't be updated.
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
  1159
        if not repo:
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
  1160
            return result
e4e69cebeedd largefiles: don't crash when cloning to a remote repo
Matt Harbison <matt_harbison@yahoo.com>
parents: 24788
diff changeset
  1161
17599
56136786000f largefiles: restore caching of largefiles with 'clone -U --all-largefiles'
Matt Harbison <matt_harbison@yahoo.com>
parents: 17598
diff changeset
  1162
        # Caching is implicitly limited to 'rev' option, since the dest repo was
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
  1163
        # truncated at that point.  The user may expect a download count with
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
  1164
        # this option, so attempt whether or not this is a largefile repo.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1165
        if opts.get(b'all_largefiles'):
45453
39ddb1121c4e largefiles: remove unused 'rev' parameter from downloadlfiles()
Yuya Nishihara <yuya@tcha.org>
parents: 45375
diff changeset
  1166
            success, missing = lfcommands.downloadlfiles(ui, repo)
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
  1167
17824
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
  1168
            if missing != 0:
221c9c3146eb largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com>
parents: 17702
diff changeset
  1169
                return None
17601
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
  1170
6e2ab601be3f largefiles: delegate to the wrapped clone command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17600
diff changeset
  1171
    return result
16644
98a9266db803 largefiles: add --all-largefiles flag to clone (issue3188)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16642
diff changeset
  1172
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1173
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1174
@eh.wrapcommand(b'rebase', extension=b'rebase')
45545
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1175
def overriderebasecmd(orig, ui, repo, **opts):
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50892
diff changeset
  1176
    if not hasattr(repo, '_largefilesenabled'):
24158
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23976
diff changeset
  1177
        return orig(ui, repo, **opts)
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23976
diff changeset
  1178
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
  1179
    resuming = opts.get('continue')
23187
f726b05ecfe6 largefiles: update standins only at the 1st commit of "hg rebase --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23183
diff changeset
  1180
    repo._lfcommithooks.append(lfutil.automatedcommithook(resuming))
23190
383ff455cab8 largefiles: avoid printing messages while rebasing by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23189
diff changeset
  1181
    repo._lfstatuswriters.append(lambda *msg, **opts: None)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1182
    try:
45545
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1183
        with ui.configoverride(
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1184
            {(b'rebase', b'experimental.inmemory'): False}, b"largefiles"
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1185
        ):
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1186
            return orig(ui, repo, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1187
    finally:
23190
383ff455cab8 largefiles: avoid printing messages while rebasing by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23189
diff changeset
  1188
        repo._lfstatuswriters.pop()
23187
f726b05ecfe6 largefiles: update standins only at the 1st commit of "hg rebase --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23183
diff changeset
  1189
        repo._lfcommithooks.pop()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1190
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1191
45545
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1192
@eh.extsetup
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1193
def overriderebase(ui):
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1194
    try:
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1195
        rebase = extensions.find(b'rebase')
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1196
    except KeyError:
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1197
        pass
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1198
    else:
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1199
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1200
        def _dorebase(orig, *args, **kwargs):
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1201
            kwargs['inmemory'] = False
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1202
            return orig(*args, **kwargs)
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1203
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1204
        extensions.wrapfunction(rebase, '_dorebase', _dorebase)
45545
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1205
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1206
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1207
@eh.wrapcommand(b'archive')
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
  1208
def overridearchivecmd(orig, ui, repo, dest, **opts):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
  1209
    with lfstatus(repo.unfiltered()):
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
  1210
        return orig(ui, repo.unfiltered(), dest, **opts)
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
  1211
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1212
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1213
@eh.wrapfunction(webcommands, 'archive')
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36736
diff changeset
  1214
def hgwebarchive(orig, web):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
  1215
    with lfstatus(web.repo):
36887
4daa22071d5d hgweb: stop passing req and tmpl into @webcommand functions (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36736
diff changeset
  1216
        return orig(web)
26417
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
  1217
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1218
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1219
@eh.wrapfunction(archival, 'archive')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1220
def overridearchive(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1221
    orig,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1222
    repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1223
    dest,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1224
    node,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1225
    kind,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1226
    decode=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1227
    match=None,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1228
    prefix=b'',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1229
    mtime=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1230
    subrepos=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1231
):
26417
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
  1232
    # For some reason setting repo.lfstatus in hgwebarchive only changes the
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
  1233
    # unfiltered repo's attr, so check that as well.
9a466b9f9792 largefiles: restore archiving largefiles with hgweb (issue4859)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25811
diff changeset
  1234
    if not repo.lfstatus and not repo.unfiltered().lfstatus:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1235
        return orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1236
            repo, dest, node, kind, decode, match, prefix, mtime, subrepos
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1237
        )
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
  1238
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
  1239
    # No need to lock because we are only reading history and
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
  1240
    # largefile caches, neither of which are modified.
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1241
    if node is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1242
        lfcommands.cachelfiles(repo.ui, repo, node)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1243
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1244
    if kind not in archival.archivers:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1245
        raise error.Abort(_(b"unknown archive type '%s'") % kind)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1246
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1247
    ctx = repo[node]
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1248
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1249
    if kind == b'files':
15224
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
  1250
        if prefix:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1251
            raise error.Abort(_(b'cannot give prefix when archiving to files'))
15224
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
  1252
    else:
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
  1253
        prefix = archival.tidyprefix(dest, kind, prefix)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1254
15224
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
  1255
    def write(name, mode, islink, getdata):
40407
3d76a8e627a6 archive: change "matcnfn" argument to a real matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 39854
diff changeset
  1256
        if match and not match(name):
15224
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
  1257
            return
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
  1258
        data = getdata()
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
  1259
        if decode:
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
  1260
            data = repo.wwritedata(name, data)
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
  1261
        archiver.addfile(prefix + name, mode, islink, data)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1262
15224
7c604d8c7e83 largefiles: remove pre-1.9 code from extension first bundled with 1.9
Na'Tosha Bard <natosha@unity3d.com>
parents: 15170
diff changeset
  1263
    archiver = archival.archivers[kind](dest, mtime or ctx.date()[0])
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1264
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1265
    if repo.ui.configbool(b"ui", b"archivemeta"):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1266
        write(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1267
            b'.hg_archival.txt',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1268
            0o644,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1269
            False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1270
            lambda: archival.buildmetadata(ctx),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1271
        )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1272
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1273
    for f in ctx:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1274
        ff = ctx.flags(f)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1275
        getdata = ctx[f].data
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1276
        lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1277
        if lfile is not None:
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1278
            if node is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1279
                path = lfutil.findfile(repo, getdata().strip())
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1280
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1281
                if path is None:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
  1282
                    raise error.Abort(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1283
                        _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1284
                            b'largefile %s not found in repo store or system cache'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1285
                        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1286
                        % lfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1287
                    )
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1288
            else:
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1289
                path = lfile
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1290
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1291
            f = lfile
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1292
27772
00bd72629a45 largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents: 27655
diff changeset
  1293
            getdata = lambda: util.readfile(path)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1294
        write(f, b'x' in ff and 0o755 or 0o644, b'l' in ff, getdata)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1295
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1296
    if subrepos:
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18341
diff changeset
  1297
        for subpath in sorted(ctx.substate):
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1298
            sub = ctx.workingsub(subpath)
40407
3d76a8e627a6 archive: change "matcnfn" argument to a real matcher
Martin von Zweigbergk <martinvonz@google.com>
parents: 39854
diff changeset
  1299
            submatch = matchmod.subdirmatcher(subpath, match)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1300
            subprefix = prefix + subpath + b'/'
44015
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1301
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1302
            # TODO: Only hgsubrepo instances have `_repo`, so figure out how to
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1303
            # infer and possibly set lfstatus in hgsubrepoarchive.  That would
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1304
            # allow only hgsubrepos to set this, instead of the current scheme
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1305
            # where the parent sets this for the child.
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1306
            with (
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50892
diff changeset
  1307
                hasattr(sub, '_repo')
44015
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1308
                and lfstatus(sub._repo)
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1309
                or util.nullcontextmanager()
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1310
            ):
43296
2cb787b65cf2 largefiles: use context manager for setting "lfstatus" on subrepos too
Martin von Zweigbergk <martinvonz@google.com>
parents: 43295
diff changeset
  1311
                sub.archive(archiver, subprefix, submatch)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1312
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1313
    archiver.done()
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1314
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1315
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1316
@eh.wrapfunction(subrepo.hgsubrepo, 'archive')
31099
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
  1317
def hgsubrepoarchive(orig, repo, archiver, prefix, match=None, decode=True):
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50892
diff changeset
  1318
    lfenabled = hasattr(repo._repo, '_largefilesenabled')
32827
d3ab31bf9c0e largefiles: avoid a crash when archiving a subrepo with largefiles disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 31892
diff changeset
  1319
    if not lfenabled or not repo._repo.lfstatus:
31099
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
  1320
        return orig(repo, archiver, prefix, match, decode)
25811
7699d3212994 largefiles: allow the archiving of largefiles to be disabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 25660
diff changeset
  1321
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1322
    repo._get(repo._state + (b'hg',))
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1323
    rev = repo._state[1]
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1324
    ctx = repo._repo[rev]
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1325
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1326
    if ctx.node() is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1327
        lfcommands.cachelfiles(repo.ui, repo._repo, ctx.node())
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1328
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1329
    def write(name, mode, islink, getdata):
17108
1894dac619de subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17107
diff changeset
  1330
        # At this point, the standin has been replaced with the largefile name,
1894dac619de subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17107
diff changeset
  1331
        # so the normal matcher works here without the lfutil variants.
1894dac619de subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17107
diff changeset
  1332
        if match and not match(f):
1894dac619de subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 17107
diff changeset
  1333
            return
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1334
        data = getdata()
31099
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
  1335
        if decode:
b44ab288358e subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents: 31023
diff changeset
  1336
            data = repo._repo.wwritedata(name, data)
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1337
41631
3d9d5e612e67 subrepo: adjust subrepo prefix before calling subrepo.archive() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41582
diff changeset
  1338
        archiver.addfile(prefix + name, mode, islink, data)
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1339
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1340
    for f in ctx:
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1341
        ff = ctx.flags(f)
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1342
        getdata = ctx[f].data
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1343
        lfile = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1344
        if lfile is not None:
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1345
            if ctx.node() is not None:
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1346
                path = lfutil.findfile(repo._repo, getdata().strip())
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1347
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1348
                if path is None:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26427
diff changeset
  1349
                    raise error.Abort(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1350
                        _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1351
                            b'largefile %s not found in repo store or system cache'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1352
                        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1353
                        % lfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1354
                    )
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1355
            else:
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1356
                path = lfile
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1357
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1358
            f = lfile
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1359
27772
00bd72629a45 largefiles: use util.readfile in overrides
Bryan O'Sullivan <bryano@fb.com>
parents: 27655
diff changeset
  1360
            getdata = lambda: util.readfile(os.path.join(prefix, path))
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1361
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1362
        write(f, b'x' in ff and 0o755 or 0o644, b'l' in ff, getdata)
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1363
18364
6252b4f1c4b4 subrepos: process subrepos in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents: 18341
diff changeset
  1364
    for subpath in sorted(ctx.substate):
25601
3ec8351fa6ed archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents: 25467
diff changeset
  1365
        sub = ctx.workingsub(subpath)
29318
2572bb2e06f8 largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com>
parents: 29311
diff changeset
  1366
        submatch = matchmod.subdirmatcher(subpath, match)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1367
        subprefix = prefix + subpath + b'/'
44015
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1368
        # TODO: Only hgsubrepo instances have `_repo`, so figure out how to
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1369
        # infer and possibly set lfstatus at the top of this function.  That
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1370
        # would allow only hgsubrepos to set this, instead of the current scheme
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1371
        # where the parent sets this for the child.
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1372
        with (
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50892
diff changeset
  1373
            hasattr(sub, '_repo')
44015
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1374
            and lfstatus(sub._repo)
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1375
            or util.nullcontextmanager()
7ca8aa8840c0 subrepo: fix a crash when archiving an svn or git subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents: 43296
diff changeset
  1376
        ):
43296
2cb787b65cf2 largefiles: use context manager for setting "lfstatus" on subrepos too
Martin von Zweigbergk <martinvonz@google.com>
parents: 43295
diff changeset
  1377
            sub.archive(archiver, subprefix, submatch, decode)
16578
43fb170a23bd largefiles: make archive -S store largefiles instead of standins
Matt Harbison <matt_harbison@yahoo.com>
parents: 16516
diff changeset
  1378
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1379
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
  1380
# If a largefile is modified, the change is not reflected in its
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
  1381
# standin until a commit. cmdutil.bailifchanged() raises an exception
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
  1382
# if the repo has uncommitted changes. Wrap it to also check if
23441
d289ba74dba3 largefiles: drop the override for 'fetch'
Matt Harbison <matt_harbison@yahoo.com>
parents: 23428
diff changeset
  1383
# largefiles were changed. This is used by bisect, backout and fetch.
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1384
@eh.wrapfunction(cmdutil, 'bailifchanged')
24472
1bf71faf042e cmdutil: allow bailifchanged to ignore merging in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24438
diff changeset
  1385
def overridebailifchanged(orig, repo, *args, **kwargs):
1bf71faf042e cmdutil: allow bailifchanged to ignore merging in progress
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 24438
diff changeset
  1386
    orig(repo, *args, **kwargs)
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
  1387
    with lfstatus(repo):
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
  1388
        s = repo.status()
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
  1389
    if s.modified or s.added or s.removed or s.deleted:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1390
        raise error.Abort(_(b'uncommitted changes'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1391
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1392
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1393
@eh.wrapfunction(cmdutil, 'postcommitstatus')
27944
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
  1394
def postcommitstatus(orig, repo, *args, **kwargs):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
  1395
    with lfstatus(repo):
27944
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
  1396
        return orig(repo, *args, **kwargs)
4511e8dac4c7 largefiles: report the missing file count after a commit that does nothing
Matt Harbison <matt_harbison@yahoo.com>
parents: 27905
diff changeset
  1397
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1398
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1399
@eh.wrapfunction(cmdutil, 'forget')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1400
def cmdutilforget(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1401
    orig, ui, repo, match, prefix, uipathfn, explicitonly, dryrun, interactive
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1402
):
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
  1403
    normalmatcher = composenormalfilematcher(match, repo[None].manifest())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1404
    bad, forgot = orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1405
        ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1406
        repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1407
        normalmatcher,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1408
        prefix,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1409
        uipathfn,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1410
        explicitonly,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1411
        dryrun,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1412
        interactive,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1413
    )
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
  1414
    m = composelargefilematcher(match, repo[None].manifest())
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1415
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
  1416
    with lfstatus(repo):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1417
        s = repo.status(match=m, clean=True)
31654
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31653
diff changeset
  1418
    manifest = repo[None].manifest()
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
  1419
    forget = sorted(s.modified + s.added + s.deleted + s.clean)
31654
1af4a1641bdb largefiles: avoid redundant changectx looking up at each repetitions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31653
diff changeset
  1420
    forget = [f for f in forget if lfutil.standin(f) in manifest]
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1421
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1422
    for f in forget:
31618
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
  1423
        fstandin = lfutil.standin(f)
8228bc8fed8c largefiles: avoid redundant standin() invocations
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31617
diff changeset
  1424
        if fstandin not in repo.dirstate and not repo.wvfs.isdir(fstandin):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1425
            ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1426
                _(b'not removing %s: file is already untracked\n') % uipathfn(f)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1427
            )
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
  1428
            bad.append(f)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1429
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1430
    for f in forget:
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1431
        if ui.verbose or not m.exact(f):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1432
            ui.status(_(b'removing %s\n') % uipathfn(f))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1433
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1434
    # Need to lock because standin files are deleted then removed from the
17424
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 17299
diff changeset
  1435
    # repository and we could race in-between.
27824
0e55e93b50b5 with: use context manager for wlock in cmdutilforget
Bryan O'Sullivan <bryano@fb.com>
parents: 27823
diff changeset
  1436
    with repo.wlock():
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1437
        lfdirstate = lfutil.openlfdirstate(ui, repo)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1438
        for f in forget:
47654
2af9709ea13c largefile: use `set_untracked` in the `forget` override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47653
diff changeset
  1439
            lfdirstate.set_untracked(f)
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
  1440
        lfdirstate.write(repo.currenttransaction())
18153
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
  1441
        standins = [lfutil.standin(f) for f in forget]
51837a31b425 largefiles: remove reporemove portability wrapper
Mads Kiilerich <madski@unity3d.com>
parents: 18152
diff changeset
  1442
        for f in standins:
31309
8908f985570c vfs: use repo.wvfs.unlinkpath
Mads Kiilerich <madski@unity3d.com>
parents: 31099
diff changeset
  1443
            repo.wvfs.unlinkpath(f, ignoremissing=True)
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
  1444
        rejected = repo[None].forget(standins)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1445
23837
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
  1446
    bad.extend(f for f in rejected if f in m.files())
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
  1447
    forgot.extend(f for f in forget if f not in rejected)
2b79d124a12f largefiles: enable subrepo support for forget
Matt Harbison <matt_harbison@yahoo.com>
parents: 23782
diff changeset
  1448
    return bad, forgot
17579
cbacb5a813dd largefiles: preserve the exit status of the forget command
Matt Harbison <matt_harbison@yahoo.com>
parents: 17578
diff changeset
  1449
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1450
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
  1451
def _getoutgoings(repo, other, missing, addfunc):
21882
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1452
    """get pairs of filename and largefile hash in outgoing revisions
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1453
    in 'missing'.
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1454
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
  1455
    largefiles already existing on 'other' repository are ignored.
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
  1456
21882
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1457
    'addfunc' is invoked with each unique pairs of filename and
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1458
    largefile hash value.
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1459
    """
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1460
    knowns = set()
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
  1461
    lfhashes = set()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1462
21882
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1463
    def dedup(fn, lfhash):
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1464
        k = (fn, lfhash)
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1465
        if k not in knowns:
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1466
            knowns.add(k)
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
  1467
            lfhashes.add(lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1468
21882
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1469
    lfutil.getlfilestoupload(repo, missing, dedup)
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
  1470
    if lfhashes:
29355
85868ecf2c0d largefiles: make storefactory._openstore public
liscju <piotr.listkiewicz@gmail.com>
parents: 29318
diff changeset
  1471
        lfexists = storefactory.openstore(repo, other).exists(lfhashes)
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
  1472
        for fn, lfhash in knowns:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1473
            if not lfexists[lfhash]:  # lfhash doesn't exist on "other"
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
  1474
                addfunc(fn, lfhash)
21882
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1475
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1476
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
  1477
def outgoinghook(ui, repo, other, opts, missing):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1478
    if opts.pop(b'large', None):
21883
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1479
        lfhashes = set()
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1480
        if ui.debugflag:
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1481
            toupload = {}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1482
21883
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1483
            def addfunc(fn, lfhash):
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1484
                if fn not in toupload:
49854
cb3918e5bc77 typing: disable [unsupported-operands] warning in the largefiles outgoing hook
Matt Harbison <matt_harbison@yahoo.com>
parents: 48946
diff changeset
  1485
                    toupload[fn] = []  # pytype: disable=unsupported-operands
21883
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1486
                toupload[fn].append(lfhash)
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1487
                lfhashes.add(lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1488
21883
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1489
            def showhashes(fn):
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1490
                for lfhash in sorted(toupload[fn]):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1491
                    ui.debug(b'    %s\n' % lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1492
21883
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1493
        else:
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1494
            toupload = set()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1495
21883
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1496
            def addfunc(fn, lfhash):
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1497
                toupload.add(fn)
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1498
                lfhashes.add(lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1499
21883
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1500
            def showhashes(fn):
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1501
                pass
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1502
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
  1503
        _getoutgoings(repo, other, missing, addfunc)
21883
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1504
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
  1505
        if not toupload:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1506
            ui.status(_(b'largefiles: no files to upload\n'))
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1507
        else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1508
            ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1509
                _(b'largefiles to upload (%d entities):\n') % (len(lfhashes))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1510
            )
21052
cde32cb5a565 largefiles: use "outgoinghooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21048
diff changeset
  1511
            for file in sorted(toupload):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1512
                ui.status(lfutil.splitstandin(file) + b'\n')
21883
87aa279f7073 largefiles: show also how many data entities are outgoing at "hg outgoing"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21882
diff changeset
  1513
                showhashes(file)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1514
            ui.status(b'\n')
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1515
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1516
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1517
@eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1518
    b'outgoing', opts=[(b'', b'large', None, _(b'display outgoing largefiles'))]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1519
)
41061
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
  1520
def _outgoingcmd(orig, *args, **kwargs):
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
  1521
    # Nothing to do here other than add the extra help option- the hook above
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
  1522
    # processes it.
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
  1523
    return orig(*args, **kwargs)
98681293c890 largefiles: port commands to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 40407
diff changeset
  1524
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1525
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1526
def summaryremotehook(ui, repo, opts, changes):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1527
    largeopt = opts.get(b'large', False)
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1528
    if changes is None:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1529
        if largeopt:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1530
            return (False, True)  # only outgoing check is needed
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1531
        else:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1532
            return (False, False)
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1533
    elif largeopt:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1534
        url, branch, peer, outgoing = changes[1]
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1535
        if peer is None:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1536
            # i18n: column positioning for "hg summary"
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1537
            ui.status(_(b'largefiles: (no remote repo)\n'))
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1538
            return
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1539
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1540
        toupload = set()
21882
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1541
        lfhashes = set()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1542
21882
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1543
        def addfunc(fn, lfhash):
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1544
            toupload.add(fn)
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1545
            lfhashes.add(lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1546
21884
a858d3de0d32 largefiles: confirm existence of outgoing largefile entities in remote store
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21883
diff changeset
  1547
        _getoutgoings(repo, peer, outgoing.missing, addfunc)
21882
12019e6aa8a2 largefiles: show also how many data entities are outgoing at "hg summary"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21545
diff changeset
  1548
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1549
        if not toupload:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1550
            # i18n: column positioning for "hg summary"
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1551
            ui.status(_(b'largefiles: (no files to upload)\n'))
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1552
        else:
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1553
            # i18n: column positioning for "hg summary"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1554
            ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1555
                _(b'largefiles: %d entities for %d files to upload\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1556
                % (len(lfhashes), len(toupload))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1557
            )
21048
ca7a57464fb3 largefiles: use "summaryremotehooks" to avoid redundant outgoing check
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
  1558
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1559
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1560
@eh.wrapcommand(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1561
    b'summary', opts=[(b'', b'large', None, _(b'display outgoing largefiles'))]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1562
)
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
  1563
def overridesummary(orig, ui, repo, *pats, **opts):
43294
03dae1044edd largefiles: add context manager for setting/clearing "lfstatus" attribute
Martin von Zweigbergk <martinvonz@google.com>
parents: 43105
diff changeset
  1564
    with lfstatus(repo):
15787
0c7b83a057aa largefiles: fix output of hg summary (issue3060)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15786
diff changeset
  1565
        orig(ui, repo, *pats, **opts)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1566
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1567
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1568
@eh.wrapfunction(scmutil, 'addremove')
50029
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1569
def scmutiladdremove(
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1570
    orig,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1571
    repo,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1572
    matcher,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1573
    prefix,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1574
    uipathfn,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1575
    opts=None,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1576
    open_tr=None,
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1577
):
26344
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26343
diff changeset
  1578
    if opts is None:
cd9cc7f30427 largefiles: remove a mutable default argument
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26343
diff changeset
  1579
        opts = {}
16636
b371056ae353 largefiles: follow normal codepath for addremove if non-largefiles repo (issue3249)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16516
diff changeset
  1580
    if not lfutil.islfilesrepo(repo):
50029
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1581
        return orig(repo, matcher, prefix, uipathfn, opts, open_tr=open_tr)
50139
ce657d7b7c39 large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50138
diff changeset
  1582
ce657d7b7c39 large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50138
diff changeset
  1583
    # open the transaction and changing_files context
ce657d7b7c39 large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50138
diff changeset
  1584
    if open_tr is not None:
ce657d7b7c39 large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50138
diff changeset
  1585
        open_tr()
ce657d7b7c39 large-files: open the transaction sooner in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50138
diff changeset
  1586
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
  1587
    # Get the list of missing largefiles so we can remove them
50140
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
  1588
    with repo.dirstate.running_status(repo):
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
  1589
        lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
  1590
        unsure, s, mtime_boundary = lfdirstate.status(
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
  1591
            matchmod.always(),
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
  1592
            subrepos=[],
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
  1593
            ignored=False,
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
  1594
            clean=False,
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
  1595
            unknown=False,
f757788a6c25 large-files: use `running_status` in `scmutiladdremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50139
diff changeset
  1596
        )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1597
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
  1598
    # Call into the normal remove code, but the removing of the standin, we want
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
  1599
    # to have handled by original addremove.  Monkey patching here makes sure
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
  1600
    # we don't remove the standin in the largefiles code, preventing a very
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
  1601
    # confused state later.
22919
1982bdb7e2cc largefiles: access status fields by name rather than index
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22914
diff changeset
  1602
    if s.deleted:
23741
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
  1603
        m = copy.copy(matcher)
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
  1604
        m._was_tampered_with = True
23741
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
  1605
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
  1606
        # The m._files and m._map attributes are not changed to the deleted list
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
  1607
        # because that affects the m.exact() test, which in turn governs whether
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
  1608
        # or not the file name is printed, and how.  Simply limit the original
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
  1609
        # matches to those in the deleted status list.
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
  1610
        matchfn = m.matchfn
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
  1611
        m.matchfn = lambda f: f in s.deleted and matchfn(f)
f2893cd8d1e5 largefiles: pass a matcher instead of a raw file list to removelargefiles()
Matt Harbison <matt_harbison@yahoo.com>
parents: 23733
diff changeset
  1612
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1613
        removelargefiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1614
            repo.ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1615
            repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1616
            True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1617
            m,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1618
            uipathfn,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1619
            opts.get(b'dry_run'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1620
            **pycompat.strkwargs(opts)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1621
        )
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
  1622
    # Call into the normal add code, and any files that *should* be added as
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
  1623
    # largefiles will be
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1624
    added, bad = addlargefiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1625
        repo.ui, repo, True, matcher, uipathfn, **pycompat.strkwargs(opts)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1626
    )
15792
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
  1627
    # Now that we've handled largefiles, hand off to the original addremove
7cbba3adabc7 largefiles: implement addremove (issue3064)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15788
diff changeset
  1628
    # function to take care of the rest.  Make sure it doesn't do anything with
23533
891aaa7c0c70 scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23530
diff changeset
  1629
    # largefiles by passing a matcher that will ignore them.
23769
bb3ee61cfaa1 largefiles: don't print files as both large and normal in addremove dryruns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23768
diff changeset
  1630
    matcher = composenormalfilematcher(matcher, repo[None].manifest(), added)
50029
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1631
28dfb2df4ab9 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50027
diff changeset
  1632
    return orig(repo, matcher, prefix, uipathfn, opts, open_tr=open_tr)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1633
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1634
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15252
diff changeset
  1635
# Calling purge with --all will cause the largefiles to be deleted.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1636
# Override repo.status to prevent this from happening.
46368
bb3a5c0df06b purge: move extension into core mercurial
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46047
diff changeset
  1637
@eh.wrapcommand(b'purge')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
  1638
def overridepurge(orig, ui, repo, *dirs, **opts):
23635
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
  1639
    # XXX Monkey patching a repoview will not work. The assigned attribute will
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
  1640
    # be set on the unfiltered repo, but we will only lookup attributes in the
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
  1641
    # unfiltered repo if the lookup in the repoview object itself fails. As the
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
  1642
    # monkey patched method exists on the repoview class the lookup will not
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
  1643
    # fail. As a result, the original version will shadow the monkey patched
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
  1644
    # one, defeating the monkey patch.
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
  1645
    #
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
  1646
    # As a work around we use an unfiltered repo here. We should do something
faec11cfb645 largefile: explain why no monkey patching on a repoview
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23634
diff changeset
  1647
    # cleaner instead.
18012
848c428bb5ee largefile: status is buggy on repoproxy, so run unfiltered
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 17894
diff changeset
  1648
    repo = repo.unfiltered()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1649
    oldstatus = repo.status
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1650
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1651
    def overridestatus(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1652
        node1=b'.',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1653
        node2=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1654
        match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1655
        ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1656
        clean=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1657
        unknown=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1658
        listsubrepos=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1659
    ):
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1660
        r = oldstatus(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1661
            node1, node2, match, ignored, clean, unknown, listsubrepos
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1662
        )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1663
        lfdirstate = lfutil.openlfdirstate(ui, repo)
48106
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
  1664
        unknown = [
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
  1665
            f for f in r.unknown if not lfdirstate.get_entry(f).any_tracked
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
  1666
        ]
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
  1667
        ignored = [
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
  1668
            f for f in r.ignored if not lfdirstate.get_entry(f).any_tracked
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
  1669
        ]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1670
        return scmutil.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1671
            r.modified, r.added, r.removed, r.deleted, unknown, ignored, r.clean
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1672
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1673
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
  1674
    repo.status = overridestatus
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1675
    orig(ui, repo, *dirs, **opts)
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1676
    repo.status = oldstatus
35348
576ba8194fa8 py3: handle keyword arguments correctly in hgext/largefiles/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35303
diff changeset
  1677
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1678
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1679
@eh.wrapcommand(b'rollback')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
  1680
def overriderollback(orig, ui, repo, **opts):
27825
4692571df9ee with: use context manager for wlock in overridepurge
Bryan O'Sullivan <bryano@fb.com>
parents: 27824
diff changeset
  1681
    with repo.wlock():
22283
cb556ea76dcd largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22196
diff changeset
  1682
        before = repo.dirstate.parents()
44452
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44129
diff changeset
  1683
        orphans = {
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1684
            f
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1685
            for f in repo.dirstate
48106
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
  1686
            if lfutil.isstandin(f) and not repo.dirstate.get_entry(f).removed
44452
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44129
diff changeset
  1687
        }
22094
7d7065476fea largefiles: put whole rollback-ing process into the same "wlock" scope
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21934
diff changeset
  1688
        result = orig(ui, repo, **opts)
22283
cb556ea76dcd largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22196
diff changeset
  1689
        after = repo.dirstate.parents()
cb556ea76dcd largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22196
diff changeset
  1690
        if before == after:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1691
            return result  # no need to restore standins
22283
cb556ea76dcd largefiles: omit restoring standins if working parent is not rollbacked
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22196
diff changeset
  1692
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1693
        pctx = repo[b'.']
22285
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
  1694
        for f in repo.dirstate:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
  1695
            if lfutil.isstandin(f):
22286
3f3b9483e7ef largefiles: unlink standins not known to the restored dirstate at rollback
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22285
diff changeset
  1696
                orphans.discard(f)
48106
82e142b9ad18 dirstate-item: use item's property instead of `state` in largefile
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48063
diff changeset
  1697
                if repo.dirstate.get_entry(f).removed:
22285
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
  1698
                    repo.wvfs.unlinkpath(f, ignoremissing=True)
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
  1699
                elif f in pctx:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
  1700
                    fctx = pctx[f]
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
  1701
                    repo.wwrite(f, fctx.data(), fctx.flags())
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
  1702
                else:
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
  1703
                    # content of standin is not so important in 'a',
85bded43cc80 largefiles: restore standins according to restored dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22284
diff changeset
  1704
                    # 'm' or 'n' (coming from the 2nd parent) cases
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1705
                    lfutil.writestandin(repo, f, b'', False)
22286
3f3b9483e7ef largefiles: unlink standins not known to the restored dirstate at rollback
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22285
diff changeset
  1706
        for standin in orphans:
3f3b9483e7ef largefiles: unlink standins not known to the restored dirstate at rollback
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22285
diff changeset
  1707
            repo.wvfs.unlinkpath(standin, ignoremissing=True)
22094
7d7065476fea largefiles: put whole rollback-ing process into the same "wlock" scope
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21934
diff changeset
  1708
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
  1709
    return result
15383
155d0f8fb7e5 largefiles: fix bad bug where transplanting a changeset with a largefile will result in an old largefile being comitted later on
Na'Tosha Bard <natosha@unity3d.com>
parents: 15369
diff changeset
  1710
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1711
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1712
@eh.wrapcommand(b'transplant', extension=b'transplant')
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16246
diff changeset
  1713
def overridetransplant(orig, ui, repo, *revs, **opts):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
  1714
    resuming = opts.get('continue')
23274
0ec2e124fcc0 largefiles: update standins only at the 1st commit of "transplant --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23273
diff changeset
  1715
    repo._lfcommithooks.append(lfutil.automatedcommithook(resuming))
23275
fae708cb32d1 largefiles: avoid printing messages while transplanting by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23274
diff changeset
  1716
    repo._lfstatuswriters.append(lambda *msg, **opts: None)
15982
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
  1717
    try:
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
  1718
        result = orig(ui, repo, *revs, **opts)
bf502ccc46d7 largefiles: fix transplant for all cases (issue3192)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15967
diff changeset
  1719
    finally:
23275
fae708cb32d1 largefiles: avoid printing messages while transplanting by "_lfstatuswriters"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23274
diff changeset
  1720
        repo._lfstatuswriters.pop()
23274
0ec2e124fcc0 largefiles: update standins only at the 1st commit of "transplant --continue"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23273
diff changeset
  1721
        repo._lfcommithooks.pop()
15383
155d0f8fb7e5 largefiles: fix bad bug where transplanting a changeset with a largefile will result in an old largefile being comitted later on
Na'Tosha Bard <natosha@unity3d.com>
parents: 15369
diff changeset
  1722
    return result
16439
290850e7aa43 largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16248
diff changeset
  1723
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1724
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1725
@eh.wrapcommand(b'cat')
16439
290850e7aa43 largefiles: fix cat for largefiles (issue3352)
Na'Tosha Bard <natosha@unity3d.com>
parents: 16248
diff changeset
  1726
def overridecat(orig, ui, repo, file1, *pats, **opts):
50880
ee393dbfe5cb largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50787
diff changeset
  1727
    ctx = logcmdutil.revsingle(repo, opts.get('rev'))
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1728
    err = 1
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1729
    notbad = set()
50880
ee393dbfe5cb largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50787
diff changeset
  1730
    m = scmutil.match(ctx, (file1,) + pats, pycompat.byteskwargs(opts))
51601
ea3343104f07 largefiles: track if a matcher was tampered with
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50928
diff changeset
  1731
    m._was_tampered_with = True
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1732
    origmatchfn = m.matchfn
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1733
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1734
    def lfmatchfn(f):
21087
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
  1735
        if origmatchfn(f):
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
  1736
            return True
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1737
        lf = lfutil.splitstandin(f)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1738
        if lf is None:
21087
3fb2affb023f largefiles: make cat on standins do something
Mads Kiilerich <madski@unity3d.com>
parents: 21086
diff changeset
  1739
            return False
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1740
        notbad.add(lf)
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1741
        return origmatchfn(lf)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1742
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1743
    m.matchfn = lfmatchfn
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
  1744
    origbadfn = m.bad
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1745
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
  1746
    def lfbadfn(f, msg):
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
  1747
        if not f in notbad:
21086
718f56c47414 largefiles: remove confusing handling of .bad return value - it is void
Mads Kiilerich <madski@unity3d.com>
parents: 21081
diff changeset
  1748
            origbadfn(f, msg)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1749
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
  1750
    m.bad = lfbadfn
24670
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1751
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1752
    origvisitdirfn = m.visitdir
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1753
24670
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1754
    def lfvisitdirfn(dir):
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1755
        if dir == lfutil.shortname:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1756
            return True
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1757
        ret = origvisitdirfn(dir)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1758
        if ret:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1759
            return ret
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1760
        lf = lfutil.splitstandin(dir)
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1761
        if lf is None:
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1762
            return False
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1763
        return origvisitdirfn(lf)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1764
24670
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1765
    m.visitdir = lfvisitdirfn
dfb86af18a35 treemanifest: optimize treemanifest._walk() to skip directories
Drew Gottlieb <drgott@google.com>
parents: 24534
diff changeset
  1766
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1767
    for f in ctx.walk(m):
50880
ee393dbfe5cb largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50787
diff changeset
  1768
        with cmdutil.makefileobj(ctx, opts.get('output'), pathname=f) as fp:
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1769
            lf = lfutil.splitstandin(f)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1770
            if lf is None or origmatchfn(f):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1771
                # duplicating unreachable code from commands.cat
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1772
                data = ctx[f].data()
50880
ee393dbfe5cb largefiles: migrate `opts` to native kwargs
Matt Harbison <matt_harbison@yahoo.com>
parents: 50787
diff changeset
  1773
                if opts.get('decode'):
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1774
                    data = repo.wwritedata(f, data)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1775
                fp.write(data)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1776
            else:
31735
3e37b479ce2f largefiles: replace readstandin() by readasstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31659
diff changeset
  1777
                hash = lfutil.readasstandin(ctx[f])
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1778
                if not lfutil.inusercache(repo.ui, hash):
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1779
                    store = storefactory.openstore(repo)
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1780
                    success, missing = store.get([(lf, hash)])
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1781
                    if len(success) != 1:
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1782
                        raise error.Abort(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1783
                            _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1784
                                b'largefile %s is not in cache and could not be '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1785
                                b'downloaded'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1786
                            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1787
                            % lf
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1788
                        )
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1789
                path = lfutil.usercachepath(repo.ui, hash)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1790
                with open(path, b"rb") as fpin:
30181
7356e6b1f5b8 util: increase filechunkiter size to 128k
Mads Kiilerich <madski@unity3d.com>
parents: 30142
diff changeset
  1791
                    for chunk in util.filechunkiter(fpin):
30142
3dcaf1c4e90d largefiles: use context for file closing
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1792
                        fp.write(chunk)
18974
d78a136a8036 largefiles: fix cat of non-largefiles from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18813
diff changeset
  1793
        err = 0
18491
b7da9c042b9e largefiles: fix cat when using relative paths from subdirectory
Mads Kiilerich <madski@unity3d.com>
parents: 18459
diff changeset
  1794
    return err
17878
d1d0140287b8 largefiles: don't copy largefiles from working dir to the store while converting
Matt Harbison <matt_harbison@yahoo.com>
parents: 17847
diff changeset
  1795
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1796
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1797
@eh.wrapfunction(merge, '_update')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1798
def mergeupdate(orig, repo, node, branchmerge, force, *args, **kwargs):
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43296
diff changeset
  1799
    matcher = kwargs.get('matcher', None)
27344
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27050
diff changeset
  1800
    # note if this is a partial update
43c00ca887d1 merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents: 27050
diff changeset
  1801
    partial = matcher and not matcher.always()
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1802
    with repo.wlock(), repo.dirstate.changing_parents(repo):
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1803
        # branch |       |         |
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1804
        #  merge | force | partial | action
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1805
        # -------+-------+---------+--------------
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1806
        #    x   |   x   |    x    | linear-merge
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1807
        #    o   |   x   |    x    | branch-merge
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1808
        #    x   |   o   |    x    | overwrite (as clean update)
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1809
        #    o   |   o   |    x    | force-branch-merge (*1)
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1810
        #    x   |   x   |    o    |   (*)
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1811
        #    o   |   x   |    o    |   (*)
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1812
        #    x   |   o   |    o    | overwrite (as revert)
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1813
        #    o   |   o   |    o    |   (*)
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1814
        #
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1815
        # (*) don't care
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1816
        # (*1) deprecated, but used internally (e.g: "rebase --collapse")
50141
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
  1817
        with repo.dirstate.running_status(repo):
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
  1818
            lfdirstate = lfutil.openlfdirstate(repo.ui, repo)
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
  1819
            unsure, s, mtime_boundary = lfdirstate.status(
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
  1820
                matchmod.always(),
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
  1821
                subrepos=[],
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
  1822
                ignored=False,
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
  1823
                clean=True,
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
  1824
                unknown=False,
42288fa03322 large-files: use `running_status` in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50140
diff changeset
  1825
            )
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1826
        oldclean = set(s.clean)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1827
        pctx = repo[b'.']
31653
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
  1828
        dctx = repo[node]
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
  1829
        for lfile in unsure + s.modified:
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
  1830
            lfileabs = repo.wvfs.join(lfile)
28715
a7f7b7acf489 largefiles: replace invocation of os.path module by vfs in overrides.py
liscju <piotr.listkiewicz@gmail.com>
parents: 28394
diff changeset
  1831
            if not repo.wvfs.exists(lfileabs):
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
  1832
                continue
31617
1f6c932862e5 largefiles: replace hashrepofile by hashfile (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31616
diff changeset
  1833
            lfhash = lfutil.hashfile(lfileabs)
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
  1834
            standin = lfutil.standin(lfile)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1835
            lfutil.writestandin(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1836
                repo, standin, lfhash, lfutil.getexecutable(lfileabs)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1837
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1838
            if standin in pctx and lfhash == lfutil.readasstandin(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1839
                pctx[standin]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1840
            ):
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1841
                oldclean.add(lfile)
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
  1842
        for lfile in s.added:
31653
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
  1843
            fstandin = lfutil.standin(lfile)
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
  1844
            if fstandin not in dctx:
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
  1845
                # in this case, content of standin file is meaningless
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
  1846
                # (in dctx, lfile is unknown, or normal file)
32d998dc2a00 largefiles: omit updating newly added standin at linear merging
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31618
diff changeset
  1847
                continue
31659
0eec36112e58 largefiles: add lfile argument to updatestandin() for efficiency (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31656
diff changeset
  1848
            lfutil.updatestandin(repo, lfile, fstandin)
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1849
        # mark all clean largefiles as dirty, just in case the update gets
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1850
        # interrupted before largefiles and lfdirstate are synchronized
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1851
        for lfile in oldclean:
50102
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
  1852
            entry = lfdirstate.get_entry(lfile)
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
  1853
            lfdirstate.hacky_extension_update_file(
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
  1854
                lfile,
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
  1855
                wc_tracked=entry.tracked,
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
  1856
                p1_tracked=entry.p1_tracked,
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
  1857
                p2_info=entry.p2_info,
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
  1858
                possibly_dirty=True,
c4b17bc78d8c large-files: use `hacky_extension_update_file` one more time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50049
diff changeset
  1859
            )
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 48118
diff changeset
  1860
        lfdirstate.write(repo.currenttransaction())
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1861
24787
9d5c27890790 largefiles: for update -C, only update largefiles when necessary
Mads Kiilerich <madski@unity3d.com>
parents: 24782
diff changeset
  1862
        oldstandins = lfutil.getstandinsstate(repo)
45545
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1863
        wc = kwargs.get('wc')
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1864
        if wc and wc.isinmemory():
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1865
            # largefiles is not a good candidate for in-memory merge (large
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1866
            # files, custom dirstate, matcher usage).
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1867
            raise error.ProgrammingError(
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1868
                b'largefiles is not compatible with in-memory merge'
e5e1285b6f6f largefiles: prevent in-memory merge instead of switching to on-disk
Martin von Zweigbergk <martinvonz@google.com>
parents: 45453
diff changeset
  1869
            )
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1870
        result = orig(repo, node, branchmerge, force, *args, **kwargs)
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1871
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1872
        newstandins = lfutil.getstandinsstate(repo)
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1873
        filelist = lfutil.getlfilestoupdate(oldstandins, newstandins)
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1874
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1875
        # to avoid leaving all largefiles as dirty and thus rehash them, mark
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1876
        # all the ones that didn't change as clean
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1877
        for lfile in oldclean.difference(filelist):
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1878
            lfdirstate.update_file(lfile, p1_tracked=True, wc_tracked=True)
30190
56b930238036 largefiles: more safe handling of interruptions while updating modifications
Mads Kiilerich <madski@unity3d.com>
parents: 29420
diff changeset
  1879
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1880
        if branchmerge or force or partial:
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1881
            filelist.extend(s.deleted + s.removed)
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1882
50103
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1883
        lfcommands.updatelfiles(
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1884
            repo.ui, repo, filelist=filelist, normallookup=partial
5a0c1d70ebcf large-files: larger "changing_parents" context in mergeupdate override
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50102
diff changeset
  1885
        )
22288
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1886
4e2559841d6c largefiles: update largefiles even if rebase is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22287
diff changeset
  1887
        return result
22289
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
  1888
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1889
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1890
@eh.wrapfunction(scmutil, 'marktouched')
22289
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
  1891
def scmutilmarktouched(orig, repo, files, *args, **kwargs):
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
  1892
    result = orig(repo, files, *args, **kwargs)
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
  1893
31613
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1894
    filelist = []
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1895
    for f in files:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1896
        lf = lfutil.splitstandin(f)
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1897
        if lf is not None:
5c1d3f1b8f44 largefiles: omit redundant isstandin() before splitstandin()
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 31309
diff changeset
  1898
            filelist.append(lf)
22289
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
  1899
    if filelist:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1900
        lfcommands.updatelfiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1901
            repo.ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1902
            repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1903
            filelist=filelist,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1904
            printmessage=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1905
            normallookup=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1906
        )
22289
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
  1907
e26df4e774f6 largefiles: update largefiles even if transplant is aborted by conflict
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 22288
diff changeset
  1908
    return result
35303
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
  1909
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1910
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1911
@eh.wrapfunction(upgrade_actions, 'preservedrequirements')
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1912
@eh.wrapfunction(upgrade_actions, 'supporteddestrequirements')
35303
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
  1913
def upgraderequirements(orig, repo):
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
  1914
    reqs = orig(repo)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1915
    if b'largefiles' in repo.requirements:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1916
        reqs.add(b'largefiles')
35303
67b7e39b441b largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net>
parents: 34756
diff changeset
  1917
    return reqs
35564
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
  1918
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1919
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1920
_lfscheme = b'largefile://'
41062
0a7f582f6f1f largefiles: port wrapped functions to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 41061
diff changeset
  1921
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1922
50785
bf92386f76fd wrapfunction: use sysstr instead of bytes as argument in "largefiles"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50142
diff changeset
  1923
@eh.wrapfunction(urlmod, 'open')
46464
32da58916fd0 largefiles: properly pass kwargs into url.open
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 46047
diff changeset
  1924
def openlargefile(orig, ui, url_, data=None, **kwargs):
35564
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
  1925
    if url_.startswith(_lfscheme):
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
  1926
        if data:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
  1927
            msg = b"cannot use data on a 'largefile://' url"
35564
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
  1928
            raise error.ProgrammingError(msg)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42755
diff changeset
  1929
        lfid = url_[len(_lfscheme) :]
35564
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
  1930
        return storefactory.getlfile(ui, lfid)
cf841f2b5a72 largefiles: add support for 'largefiles://' url scheme
Boris Feld <boris.feld@octobus.net>
parents: 35348
diff changeset
  1931
    else:
46464
32da58916fd0 largefiles: properly pass kwargs into url.open
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 46047
diff changeset
  1932
        return orig(ui, url_, data=data, **kwargs)