hgext/largefiles/reposetup.py
author Arseniy Alekseyev <aalekseyev@janestreet.com>
Sun, 22 May 2022 23:26:06 +0200
branchstable
changeset 49209 2dd53a33aefa
parent 48664 497c2655c71e
child 48875 6000f5b25c9b
permissions -rw-r--r--
test-revlog: test a repository that contains a diff against nullrev We are witnessing a crash in the rust code, so we lets make sure this case is tested.
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
'''setup for largefiles repositories: reposetup'''
29314
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    10
from __future__ import absolute_import
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    11
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    12
import copy
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    13
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    14
from mercurial.i18n import _
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    15
29314
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    16
from mercurial import (
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    17
    error,
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    18
    extensions,
29314
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    19
    localrepo,
29319
cc497d2830b0 largefiles: rename match_ to matchmod import in reposetup
liscju <piotr.listkiewicz@gmail.com>
parents: 29314
diff changeset
    20
    match as matchmod,
29314
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    21
    scmutil,
43585
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
    22
    util,
29314
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    23
)
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    24
48382
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
    25
from mercurial.dirstateutils import timestamp
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
    26
29314
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    27
from . import (
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    28
    lfcommands,
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    29
    lfutil,
bde283a1ad1a py3: make largefiles/reposetup.py use absolute_import
liscju <piotr.listkiewicz@gmail.com>
parents: 28878
diff changeset
    30
)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    31
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
    32
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    33
def reposetup(ui, repo):
20858
bc56ec9e64df hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20177
diff changeset
    34
    # wire repositories should be given new wireproto functions
bc56ec9e64df hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20177
diff changeset
    35
    # by "proto.wirereposetup()" via "hg.wirepeersetupfuncs"
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    36
    if not repo.local():
20858
bc56ec9e64df hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20177
diff changeset
    37
        return
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    38
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16141
diff changeset
    39
    class lfilesrepo(repo.__class__):
24158
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23958
diff changeset
    40
        # the mark to examine whether "repo" object enables largefiles or not
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23958
diff changeset
    41
        _largefilesenabled = True
d414c28db84d largefiles: access to specific fields only if largefiles enabled (issue4547)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23958
diff changeset
    42
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    43
        lfstatus = False
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
    44
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15250
diff changeset
    45
        # When lfstatus is set, return a context that gives the names
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15250
diff changeset
    46
        # of largefiles instead of their corresponding standins and
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15250
diff changeset
    47
        # identifies the largefiles as always binary, regardless of
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15250
diff changeset
    48
        # their actual contents.
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    49
        def __getitem__(self, changeid):
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16141
diff changeset
    50
            ctx = super(lfilesrepo, self).__getitem__(changeid)
23958
df463ca0adef largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23923
diff changeset
    51
            if self.lfstatus:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
    52
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    53
                def files(orig):
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    54
                    filenames = orig()
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    55
                    return [lfutil.splitstandin(f) or f for f in filenames]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
    56
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    57
                extensions.wrapfunction(ctx, 'files', files)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    58
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    59
                def manifest(orig):
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    60
                    man1 = orig()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
    61
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    62
                    class lfilesmanifest(man1.__class__):
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    63
                        def __contains__(self, filename):
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    64
                            orig = super(lfilesmanifest, self).__contains__
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    65
                            return orig(filename) or orig(
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    66
                                lfutil.standin(filename)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    67
                            )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
    68
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    69
                    man1.__class__ = lfilesmanifest
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    70
                    return man1
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
    71
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    72
                extensions.wrapfunction(ctx, 'manifest', manifest)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
    73
43589
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    74
                def filectx(orig, path, fileid=None, filelog=None):
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    75
                    try:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    76
                        if filelog is not None:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    77
                            result = orig(path, fileid, filelog)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    78
                        else:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    79
                            result = orig(path, fileid)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    80
                    except error.LookupError:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    81
                        # Adding a null character will cause Mercurial to
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    82
                        # identify this as a binary file.
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    83
                        if filelog is not None:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    84
                            result = orig(lfutil.standin(path), fileid, filelog)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    85
                        else:
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    86
                            result = orig(lfutil.standin(path), fileid)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    87
                        olddata = result.data
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    88
                        result.data = lambda: olddata() + b'\0'
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    89
                    return result
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    90
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    91
                extensions.wrapfunction(ctx, 'filectx', filectx)
7f4d58c21aec largefiles: avoid dynamically subclassing context instances
Martin von Zweigbergk <martinvonz@google.com>
parents: 43586
diff changeset
    92
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    93
            return ctx
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    94
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
    95
        # Figure out the status of big files and insert them into the
15252
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15250
diff changeset
    96
        # appropriate list in the result. Also removes standin files
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15250
diff changeset
    97
        # from the listing. Revert to the original status if
6e809bb4f969 largefiles: improve comments, internal docstrings
Greg Ward <greg@gerg.ca>
parents: 15250
diff changeset
    98
        # self.lfstatus is False.
23958
df463ca0adef largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23923
diff changeset
    99
        # XXX large file status is buggy when used on repo proxy.
df463ca0adef largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23923
diff changeset
   100
        # XXX this needs to be investigated.
df463ca0adef largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23923
diff changeset
   101
        @localrepo.unfilteredmethod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   102
        def status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   103
            self,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   104
            node1=b'.',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   105
            node2=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   106
            match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   107
            ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   108
            clean=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   109
            unknown=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   110
            listsubrepos=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   111
        ):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   112
            listignored, listclean, listunknown = ignored, clean, unknown
22518
52dd6e25121f largefiles: extract 'orig' method in reposetup.status
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22517
diff changeset
   113
            orig = super(lfilesrepo, self).status
23958
df463ca0adef largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23923
diff changeset
   114
            if not self.lfstatus:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   115
                return orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   116
                    node1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   117
                    node2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   118
                    match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   119
                    listignored,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   120
                    listclean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   121
                    listunknown,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   122
                    listsubrepos,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   123
                )
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   124
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   125
            # some calls in this function rely on the old version of status
23958
df463ca0adef largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23923
diff changeset
   126
            self.lfstatus = False
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   127
            ctx1 = self[node1]
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   128
            ctx2 = self[node2]
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   129
            working = ctx2.rev() is None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   130
            parentworking = working and ctx1 == self[b'.']
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   131
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   132
            if match is None:
41676
0531dff73d0b match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 35084
diff changeset
   133
                match = matchmod.always()
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   134
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   135
            try:
43585
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
   136
                # updating the dirstate is optional
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
   137
                # so we don't wait on the lock
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
   138
                wlock = self.wlock(False)
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
   139
                gotlock = True
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
   140
            except error.LockError:
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
   141
                wlock = util.nullcontextmanager()
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
   142
                gotlock = False
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
   143
            with wlock:
15653
93c77d5b9752 largefiles: optimize status when files are specified (issue3144)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15630
diff changeset
   144
23146
5311de37b86f largefiles: shortcircuit status code also for non-matching patterns
Martin von Zweigbergk <martinvonz@google.com>
parents: 23139
diff changeset
   145
                # First check if paths or patterns were specified on the
5311de37b86f largefiles: shortcircuit status code also for non-matching patterns
Martin von Zweigbergk <martinvonz@google.com>
parents: 23139
diff changeset
   146
                # command line.  If there were, and they don't match any
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   147
                # largefiles, we should just bail here and let super
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   148
                # handle it -- thus gaining a big performance boost.
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   149
                lfdirstate = lfutil.openlfdirstate(ui, self)
23146
5311de37b86f largefiles: shortcircuit status code also for non-matching patterns
Martin von Zweigbergk <martinvonz@google.com>
parents: 23139
diff changeset
   150
                if not match.always():
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   151
                    for f in lfdirstate:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   152
                        if match(f):
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   153
                            break
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   154
                    else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   155
                        return orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   156
                            node1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   157
                            node2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   158
                            match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   159
                            listignored,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   160
                            listclean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   161
                            listunknown,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   162
                            listsubrepos,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   163
                        )
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   164
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   165
                # Create a copy of match that matches standins instead
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   166
                # of largefiles.
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   167
                def tostandins(files):
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   168
                    if not working:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   169
                        return files
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   170
                    newfiles = []
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   171
                    dirstate = self.dirstate
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   172
                    for f in files:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   173
                        sf = lfutil.standin(f)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   174
                        if sf in dirstate:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   175
                            newfiles.append(sf)
35084
61888bd0b300 dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents: 34344
diff changeset
   176
                        elif dirstate.hasdir(sf):
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   177
                            # Directory entries could be regular or
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   178
                            # standin, check both
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   179
                            newfiles.extend((f, sf))
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   180
                        else:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   181
                            newfiles.append(f)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   182
                    return newfiles
18149
2dcc3653b361 largefiles: unindent code
Mads Kiilerich <madski@unity3d.com>
parents: 18148
diff changeset
   183
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   184
                m = copy.copy(match)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   185
                m._files = tostandins(m._files)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   186
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   187
                result = orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   188
                    node1, node2, m, ignored, clean, unknown, listsubrepos
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   189
                )
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   190
                if working:
15617
74e691b141c4 largefiles: optimize performance of status on largefiles repos (issue3136)
Na'Tosha Bard <natosha@unity3d.com>
parents: 15385
diff changeset
   191
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   192
                    def sfindirstate(f):
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   193
                        sf = lfutil.standin(f)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   194
                        dirstate = self.dirstate
35084
61888bd0b300 dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents: 34344
diff changeset
   195
                        return sf in dirstate or dirstate.hasdir(sf)
18149
2dcc3653b361 largefiles: unindent code
Mads Kiilerich <madski@unity3d.com>
parents: 18148
diff changeset
   196
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   197
                    match._files = [f for f in match._files if sfindirstate(f)]
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   198
                    # Don't waste time getting the ignored and unknown
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   199
                    # files from lfdirstate
48390
322525db4c98 status: use filesystem time boundary to invalidate racy mtime
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48382
diff changeset
   200
                    unsure, s, mtime_boundary = lfdirstate.status(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   201
                        match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   202
                        subrepos=[],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   203
                        ignored=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   204
                        clean=listclean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   205
                        unknown=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   206
                    )
30191
328545c7d8a1 largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents: 29319
diff changeset
   207
                    (modified, added, removed, deleted, clean) = (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   208
                        s.modified,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   209
                        s.added,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   210
                        s.removed,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   211
                        s.deleted,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   212
                        s.clean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   213
                    )
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   214
                    if parentworking:
48382
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
   215
                        wctx = repo[None]
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   216
                        for lfile in unsure:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   217
                            standin = lfutil.standin(lfile)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   218
                            if standin not in ctx1:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   219
                                # from second parent
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   220
                                modified.append(lfile)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   221
                            elif lfutil.readasstandin(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   222
                                ctx1[standin]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   223
                            ) != lfutil.hashfile(self.wjoin(lfile)):
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   224
                                modified.append(lfile)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   225
                            else:
22523
8cd91f481ffd largefiles: remove unnecessary clearing of status fields
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22518
diff changeset
   226
                                if listclean:
8cd91f481ffd largefiles: remove unnecessary clearing of status fields
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22518
diff changeset
   227
                                    clean.append(lfile)
48382
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
   228
                                s = wctx[lfile].lstat()
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
   229
                                mode = s.st_mode
991e6f728b50 status: adapt largefile to gather stats at lookup time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48168
diff changeset
   230
                                size = s.st_size
48396
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
   231
                                mtime = timestamp.reliable_mtime_of(
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
   232
                                    s, mtime_boundary
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
   233
                                )
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
   234
                                if mtime is not None:
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
   235
                                    cache_data = (mode, size, mtime)
c0d88407b7d4 largefile: use the proper "mtime boundary" logic during fixup
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48390
diff changeset
   236
                                    lfdirstate.set_clean(lfile, cache_data)
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   237
                    else:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   238
                        tocheck = unsure + modified + added + clean
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   239
                        modified, added, clean = [], [], []
23383
7f8d27e1f862 largefiles: avoid exec-bit examination on the platform being unaware of it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23090
diff changeset
   240
                        checkexec = self.dirstate._checkexec
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   241
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   242
                        for lfile in tocheck:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   243
                            standin = lfutil.standin(lfile)
23043
244dbb646ab7 largefiles: inline redundant inctx function in status
Mads Kiilerich <madski@unity3d.com>
parents: 22919
diff changeset
   244
                            if standin in ctx1:
23090
24600c9d7f4e largefiles: add examination of exec bit in "hg status --rev REV" case
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23089
diff changeset
   245
                                abslfile = self.wjoin(lfile)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   246
                                if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   247
                                    lfutil.readasstandin(ctx1[standin])
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   248
                                    != lfutil.hashfile(abslfile)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   249
                                ) or (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   250
                                    checkexec
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   251
                                    and (b'x' in ctx1.flags(standin))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   252
                                    != bool(lfutil.getexecutable(abslfile))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   253
                                ):
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   254
                                    modified.append(lfile)
22523
8cd91f481ffd largefiles: remove unnecessary clearing of status fields
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22518
diff changeset
   255
                                elif listclean:
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   256
                                    clean.append(lfile)
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   257
                            else:
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   258
                                added.append(lfile)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   259
23089
197dc4580da2 largefiles: ignore removal status of files not managed in the target context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23044
diff changeset
   260
                        # at this point, 'removed' contains largefiles
197dc4580da2 largefiles: ignore removal status of files not managed in the target context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23044
diff changeset
   261
                        # marked as 'R' in the working context.
197dc4580da2 largefiles: ignore removal status of files not managed in the target context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23044
diff changeset
   262
                        # then, largefiles not managed also in the target
197dc4580da2 largefiles: ignore removal status of files not managed in the target context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23044
diff changeset
   263
                        # context should be excluded from 'removed'.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   264
                        removed = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   265
                            lfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   266
                            for lfile in removed
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   267
                            if lfutil.standin(lfile) in ctx1
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   268
                        ]
23089
197dc4580da2 largefiles: ignore removal status of files not managed in the target context
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23044
diff changeset
   269
30191
328545c7d8a1 largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents: 29319
diff changeset
   270
                    # Standins no longer found in lfdirstate have been deleted
22525
764127f58903 largefiles: simplify iteration over standins
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22524
diff changeset
   271
                    for standin in ctx1.walk(lfutil.getstandinmatcher(self)):
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   272
                        lfile = lfutil.splitstandin(standin)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   273
                        if not match(lfile):
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   274
                            continue
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   275
                        if lfile not in lfdirstate:
30191
328545c7d8a1 largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents: 29319
diff changeset
   276
                            deleted.append(lfile)
328545c7d8a1 largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents: 29319
diff changeset
   277
                            # Sync "largefile has been removed" back to the
328545c7d8a1 largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents: 29319
diff changeset
   278
                            # standin. Removing a file as a side effect of
328545c7d8a1 largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents: 29319
diff changeset
   279
                            # running status is gross, but the alternatives (if
328545c7d8a1 largefiles: fix 'deleted' files sometimes persistently appearing with R status
Mads Kiilerich <madski@unity3d.com>
parents: 29319
diff changeset
   280
                            # any) are worse.
30233
3afde791dce1 largefiles: handle that a found standin file doesn't exist when removing it
Mads Kiilerich <madski@unity3d.com>
parents: 30191
diff changeset
   281
                            self.wvfs.unlinkpath(standin, ignoremissing=True)
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15629
diff changeset
   282
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   283
                    # Filter result lists
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   284
                    result = list(result)
19056
ac41bb76c737 largefiles: wlock in status before lfdirstate.write()
Mads Kiilerich <madski@unity3d.com>
parents: 18969
diff changeset
   285
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   286
                    # Largefiles are not really removed when they're
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   287
                    # still in the normal dirstate. Likewise, normal
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   288
                    # files are not really removed if they are still in
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   289
                    # lfdirstate. This happens in merges where files
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   290
                    # change type.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   291
                    removed = [f for f in removed if f not in self.dirstate]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   292
                    result[2] = [f for f in result[2] if f not in lfdirstate]
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15629
diff changeset
   293
42926
34ed651ba7e4 cleanup: fix leakage of dirstate._map to client code
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
   294
                    lfiles = set(lfdirstate)
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   295
                    # Unknown files
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   296
                    result[4] = set(result[4]).difference(lfiles)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   297
                    # Ignored files
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   298
                    result[5] = set(result[5]).difference(lfiles)
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   299
                    # combine normal files and largefiles
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   300
                    normals = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   301
                        [fn for fn in filelist if not lfutil.isstandin(fn)]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   302
                        for filelist in result
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   303
                    ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   304
                    lfstatus = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   305
                        modified,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   306
                        added,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   307
                        removed,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   308
                        deleted,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   309
                        [],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   310
                        [],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   311
                        clean,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   312
                    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   313
                    result = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   314
                        sorted(list1 + list2)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   315
                        for (list1, list2) in zip(normals, lfstatus)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   316
                    ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   317
                else:  # not against working directory
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   318
                    result = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   319
                        [lfutil.splitstandin(f) or f for f in items]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   320
                        for items in result
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   321
                    ]
15663
9036c7d106bf largefiles: handle merges between normal files and largefiles (issue3084)
Martin Geisler <mg@aragost.com>
parents: 15629
diff changeset
   322
43585
99b881195abf largefiles: use context manager for wlock in repo.status() override
Martin von Zweigbergk <martinvonz@google.com>
parents: 43435
diff changeset
   323
                if gotlock:
48168
df3021c1f093 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 47715
diff changeset
   324
                    lfdirstate.write(self.currenttransaction())
22515
b4e251b7e9a8 largefiles: reduce indentation by dropping 'else' block after 'return'
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22514
diff changeset
   325
23958
df463ca0adef largefiles: revert to lfilesrepo.status() being an unfiltered method
Matt Harbison <matt_harbison@yahoo.com>
parents: 23923
diff changeset
   326
            self.lfstatus = True
22914
c95db3208a33 status: update various other methods to return new class
Martin von Zweigbergk <martinvonz@gmail.com>
parents: 22911
diff changeset
   327
            return scmutil.status(*result)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   328
23184
3100d1cbce32 largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23147
diff changeset
   329
        def commitctx(self, ctx, *args, **kwargs):
3100d1cbce32 largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23147
diff changeset
   330
            node = super(lfilesrepo, self).commitctx(ctx, *args, **kwargs)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   331
23184
3100d1cbce32 largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23147
diff changeset
   332
            class lfilesctx(ctx.__class__):
3100d1cbce32 largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23147
diff changeset
   333
                def markcommitted(self, node):
3100d1cbce32 largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23147
diff changeset
   334
                    orig = super(lfilesctx, self).markcommitted
3100d1cbce32 largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23147
diff changeset
   335
                    return lfutil.markcommitted(orig, self, node)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   336
23184
3100d1cbce32 largefiles: factor out procedures to update lfdirstate for post-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23147
diff changeset
   337
            ctx.__class__ = lfilesctx
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   338
            return node
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   339
15254
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15253
diff changeset
   340
        # Before commit, largefile standins have not had their
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15253
diff changeset
   341
        # contents updated to reflect the hash of their largefile.
dd03d3a9f888 largefiles: more work on cleaning up comments
Greg Ward <greg@gerg.ca>
parents: 15253
diff changeset
   342
        # Do that here.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   343
        def commit(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   344
            self,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   345
            text=b"",
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   346
            user=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   347
            date=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   348
            match=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   349
            force=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   350
            editor=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   351
            extra=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   352
        ):
31410
86dfd31c0329 largefiles: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30233
diff changeset
   353
            if extra is None:
86dfd31c0329 largefiles: don't use mutable default argument value
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30233
diff changeset
   354
                extra = {}
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16141
diff changeset
   355
            orig = super(lfilesrepo, self).commit
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   356
27842
002108b219e3 with: use context manager in largefiles commit
Bryan O'Sullivan <bryano@fb.com>
parents: 26587
diff changeset
   357
            with self.wlock():
23186
6de61d0b773f largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23185
diff changeset
   358
                lfcommithook = self._lfcommithooks[-1]
6de61d0b773f largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23185
diff changeset
   359
                match = lfcommithook(self, match)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   360
                result = orig(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   361
                    text=text,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   362
                    user=user,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   363
                    date=date,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   364
                    match=match,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   365
                    force=force,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   366
                    editor=editor,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   367
                    extra=extra,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   368
                )
15794
0d91211dd12f largefiles: fix inappropriate locking (issue3182)
Levi Bard <levi@unity3d.com>
parents: 15793
diff changeset
   369
                return result
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   370
23185
9870173e0b48 largefiles: factor out procedures to update standins for pre-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23184
diff changeset
   371
        # TODO: _subdirlfs should be moved into "lfutil.py", because
9870173e0b48 largefiles: factor out procedures to update standins for pre-committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23184
diff changeset
   372
        # it is referred only from "lfutil.updatestandinsbymatch"
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   373
        def _subdirlfs(self, files, lfiles):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45106
diff changeset
   374
            """
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   375
            Adjust matched file list
23543
4dd8a6a1240d spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23394
diff changeset
   376
            If we pass a directory to commit whose only committable files
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   377
            are largefiles, the core commit code aborts before finding
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   378
            the largefiles.
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   379
            So we do the following:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   380
            For directories that only have largefiles as matches,
18644
3e92772d5383 spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents: 18182
diff changeset
   381
            we explicitly add the largefiles to the match list and remove
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   382
            the directory.
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   383
            In other cases, we leave the match list unmodified.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45106
diff changeset
   384
            """
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   385
            actualfiles = []
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   386
            dirs = []
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   387
            regulars = []
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   388
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   389
            for f in files:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   390
                if lfutil.isstandin(f + b'/'):
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25149
diff changeset
   391
                    raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   392
                        _(b'file "%s" is a largefile standin') % f,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   393
                        hint=b'commit the largefile itself instead',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   394
                    )
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   395
                # Scan directories
28716
5c14af475f61 largefiles: replace invocation of os.path module by vfs in reposetup.py
liscju <piotr.listkiewicz@gmail.com>
parents: 27842
diff changeset
   396
                if self.wvfs.isdir(f):
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   397
                    dirs.append(f)
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   398
                else:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   399
                    regulars.append(f)
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   400
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   401
            for f in dirs:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   402
                matcheddir = False
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   403
                d = self.dirstate.normalize(f) + b'/'
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   404
                # Check for matched normal files
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   405
                for mf in regulars:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   406
                    if self.dirstate.normalize(mf).startswith(d):
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   407
                        actualfiles.append(f)
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   408
                        matcheddir = True
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   409
                        break
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   410
                if not matcheddir:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   411
                    # If no normal match, manually append
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   412
                    # any matching largefiles
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   413
                    for lf in lfiles:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   414
                        if self.dirstate.normalize(lf).startswith(d):
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   415
                            actualfiles.append(lf)
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   416
                            if not matcheddir:
23923
ab6fd3205dad largefiles: fix commit of a directory with no largefile changes (issue4330)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23660
diff changeset
   417
                                # There may still be normal files in the dir, so
24180
d8e0c591781c spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 24163
diff changeset
   418
                                # add a directory to the list, which
24007
240343e13c4d largefiles: update _subdirlfs() comment
Matt Harbison <matt_harbison@yahoo.com>
parents: 23958
diff changeset
   419
                                # forces status/dirstate to walk all files and
240343e13c4d largefiles: update _subdirlfs() comment
Matt Harbison <matt_harbison@yahoo.com>
parents: 23958
diff changeset
   420
                                # call the match function on the matcher, even
24180
d8e0c591781c spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 24163
diff changeset
   421
                                # on case sensitive filesystems.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   422
                                actualfiles.append(b'.')
18064
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   423
                                matcheddir = True
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   424
                # Nothing in dir, so readd it
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   425
                # and let commit reject it
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   426
                if not matcheddir:
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   427
                    actualfiles.append(f)
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   428
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   429
            # Always add normal files
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   430
            actualfiles += regulars
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   431
            return actualfiles
7e2b9f6a2cd0 largefiles: commit directories that only contain largefiles (issue3548)
Levi Bard <levi@unity3d.com>
parents: 17803
diff changeset
   432
16247
d87d9d8a8e03 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com>
parents: 16141
diff changeset
   433
    repo.__class__ = lfilesrepo
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   434
23186
6de61d0b773f largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23185
diff changeset
   435
    # stack of hooks being executed before committing.
6de61d0b773f largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23185
diff changeset
   436
    # only last element ("_lfcommithooks[-1]") is used for each committing.
6de61d0b773f largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23185
diff changeset
   437
    repo._lfcommithooks = [lfutil.updatestandinsbymatch]
6de61d0b773f largefiles: introduce "_lfcommithooks" to abstract pre-committing procedures
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23185
diff changeset
   438
23188
94ac64bcf6fe largefiles: introduce "_lfstatuswriters" to customize status reporting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23186
diff changeset
   439
    # Stack of status writer functions taking "*msg, **opts" arguments
23543
4dd8a6a1240d spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents: 23394
diff changeset
   440
    # like "ui.status()". Only last element ("_lfstatuswriters[-1]")
23188
94ac64bcf6fe largefiles: introduce "_lfstatuswriters" to customize status reporting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23186
diff changeset
   441
    # is used to write status out.
94ac64bcf6fe largefiles: introduce "_lfstatuswriters" to customize status reporting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23186
diff changeset
   442
    repo._lfstatuswriters = [ui.status]
94ac64bcf6fe largefiles: introduce "_lfstatuswriters" to customize status reporting
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 23186
diff changeset
   443
28876
79b8f052ee51 localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents: 28716
diff changeset
   444
    def prepushoutgoinghook(pushop):
28878
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28876
diff changeset
   445
        """Push largefiles for pushop before pushing revisions."""
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28876
diff changeset
   446
        lfrevs = pushop.lfrevs
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28876
diff changeset
   447
        if lfrevs is None:
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28876
diff changeset
   448
            lfrevs = pushop.outgoing.missing
a75c9665ef06 largefiles: introduce push --lfrev to control which revisions are pushed
Mads Kiilerich <madski@unity3d.com>
parents: 28876
diff changeset
   449
        if lfrevs:
21044
52a5eabf1f2f largefiles: reuse "findcommonoutgoing()" result at "hg push"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
   450
            toupload = set()
52a5eabf1f2f largefiles: reuse "findcommonoutgoing()" result at "hg push"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
   451
            addfunc = lambda fn, lfhash: toupload.add(lfhash)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   452
            lfutil.getlfilestoupload(pushop.repo, lfrevs, addfunc)
28876
79b8f052ee51 localrepo: refactor prepushoutgoinghook to take a pushop
Mads Kiilerich <madski@unity3d.com>
parents: 28716
diff changeset
   453
            lfcommands.uploadlfiles(ui, pushop.repo, pushop.remote, toupload)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   454
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   455
    repo.prepushoutgoinghooks.add(b"largefiles", prepushoutgoinghook)
21044
52a5eabf1f2f largefiles: reuse "findcommonoutgoing()" result at "hg push"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 21042
diff changeset
   456
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   457
    def checkrequireslfiles(ui, repo, **kwargs):
48664
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
   458
        with repo.lock():
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
   459
            if b'largefiles' not in repo.requirements and any(
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
   460
                lfutil.shortname + b'/' in f[1] for f in repo.store.datafiles()
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
   461
            ):
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
   462
                repo.requirements.add(b'largefiles')
497c2655c71e largefiles: take lock before writing requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48396
diff changeset
   463
                scmutil.writereporequirements(repo)
15168
cfccd3bee7b3 hgext: add largefiles extension
various
parents:
diff changeset
   464
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   465
    ui.setconfig(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   466
        b'hooks', b'changegroup.lfiles', checkrequireslfiles, b'largefiles'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42926
diff changeset
   467
    )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   468
    ui.setconfig(b'hooks', b'commit.lfiles', checkrequireslfiles, b'largefiles')