[PATCH stable] largefiles: fix 'deleted' files sometimes persistently appearing with R status

Mads Kiilerich mads at kiilerich.com
Mon Oct 17 12:37:55 EDT 2016


On 10/17/2016 05:12 PM, Mads Kiilerich wrote:
> # HG changeset patch
> # User Mads Kiilerich <madski at unity3d.com>
> # Date 1476717144 -7200
> #      Mon Oct 17 17:12:24 2016 +0200
> # Node ID bba9f6bba98f82f2403aac8dc656569562690472
> # Parent  92414d57a05de39864aecc625e775c693d9edb51
> largefiles: fix 'deleted' files sometimes persistently appearing with R status
>
> A code snippet that has been around since largefiles was introduced was wrong:
> Standins no longer found in lfdirstate has *not* been removed -
> they have probably just been deleted ... or not created.
>
> This wrong reporting did that 'up -C' didn't undo the change and didn't sync
> the two dirstates.
>
> Instead of reporting such files as removed, propagate the deletion to the
> standin file and report the file as deleted.
>
> diff --git a/hgext/largefiles/reposetup.py b/hgext/largefiles/reposetup.py
> --- a/hgext/largefiles/reposetup.py
> +++ b/hgext/largefiles/reposetup.py
> @@ -164,8 +164,8 @@ def reposetup(ui, repo):
>                       # files from lfdirstate
>                       unsure, s = lfdirstate.status(match, [], False, listclean,
>                                                     False)
> -                    (modified, added, removed, clean) = (s.modified, s.added,
> -                                                         s.removed, s.clean)
> +                    (modified, added, removed, deleted, clean) = (
> +                        s.modified, s.added, s.removed, s.deleted, s.clean)
>                       if parentworking:
>                           for lfile in unsure:
>                               standin = lfutil.standin(lfile)
> @@ -206,14 +206,18 @@ def reposetup(ui, repo):
>                           removed = [lfile for lfile in removed
>                                      if lfutil.standin(lfile) in ctx1]
>   
> -                    # Standins no longer found in lfdirstate has been
> -                    # removed
> +                    # Standins no longer found in lfdirstate have been deleted
>                       for standin in ctx1.walk(lfutil.getstandinmatcher(self)):
>                           lfile = lfutil.splitstandin(standin)
>                           if not match(lfile):
>                               continue
>                           if lfile not in lfdirstate:
> -                            removed.append(lfile)
> +                            deleted.append(lfile)
> +                            # Sync "largefile has been removed" back to the
Hmm ... for clarity, this should have been "deleted"

/Mads


More information about the Mercurial-devel mailing list