[PATCH 8 of 8] largefiles: add lfile argument to updatestandin() for efficiency (API)

Augie Fackler raf at durin42.com
Mon Mar 27 12:28:18 EDT 2017


On Mon, Mar 27, 2017 at 10:53:48AM +0900, FUJIWARA Katsunori wrote:
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
> # Date 1490575476 -32400
> #      Mon Mar 27 09:44:36 2017 +0900
> # Node ID 30343c565caf83ff165b05d2cd95f63ab50fe377
> # Parent  b80768388eb2700a619159447461063983dd5806
> largefiles: add lfile argument to updatestandin() for efficiency (API)

These are queued, thanks.

>
> Before this patch, updatestandin() takes "standin" argument, and
> applies splitstandin() on it to pick out a path to largefile (aka
> "lfile" or so) from standin.
>
> But in fact, all callers already knows "lfile". In addition to it,
> many callers knows both "standin" and "lfile".
>
> Therefore, making updatestandin() take only one of "standin" or
> "lfile" is inefficient.
>
> diff --git a/hgext/largefiles/lfutil.py b/hgext/largefiles/lfutil.py
> --- a/hgext/largefiles/lfutil.py
> +++ b/hgext/largefiles/lfutil.py
> @@ -342,8 +342,11 @@ def splitstandin(filename):
>      else:
>          return None
>
> -def updatestandin(repo, standin):
> -    lfile = splitstandin(standin)
> +def updatestandin(repo, lfile, standin):
> +    """Re-calculate hash value of lfile and write it into standin
> +
> +    This assumes that "lfutil.standin(lfile) == standin", for efficiency.
> +    """
>      file = repo.wjoin(lfile)
>      if repo.wvfs.exists(lfile):
>          hash = hashfile(file)
> @@ -560,7 +563,7 @@ def updatestandinsbymatch(repo, match):
>                      # performed and the working copy is not updated
>                      # yet.
>                      if repo.wvfs.exists(lfile):
> -                        updatestandin(repo, fstandin)
> +                        updatestandin(repo, lfile, fstandin)
>
>          return match
>
> @@ -586,7 +589,7 @@ def updatestandinsbymatch(repo, match):
>      for fstandin in standins:
>          lfile = splitstandin(fstandin)
>          if lfdirstate[lfile] != 'r':
> -            updatestandin(repo, fstandin)
> +            updatestandin(repo, lfile, fstandin)
>
>      # Cook up a new matcher that only matches regular files or
>      # standins corresponding to the big files requested by the
> diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py
> --- a/hgext/largefiles/overrides.py
> +++ b/hgext/largefiles/overrides.py
> @@ -736,7 +736,7 @@ def overriderevert(orig, ui, repo, ctx,
>          s = lfutil.lfdirstatestatus(lfdirstate, repo)
>          lfdirstate.write()
>          for lfile in s.modified:
> -            lfutil.updatestandin(repo, lfutil.standin(lfile))
> +            lfutil.updatestandin(repo, lfile, lfutil.standin(lfile))
>          for lfile in s.deleted:
>              fstandin = lfutil.standin(lfile)
>              if (repo.wvfs.exists(fstandin)):
> @@ -1417,7 +1417,7 @@ def mergeupdate(orig, repo, node, branch
>                  # in this case, content of standin file is meaningless
>                  # (in dctx, lfile is unknown, or normal file)
>                  continue
> -            lfutil.updatestandin(repo, fstandin)
> +            lfutil.updatestandin(repo, lfile, fstandin)
>          # mark all clean largefiles as dirty, just in case the update gets
>          # interrupted before largefiles and lfdirstate are synchronized
>          for lfile in oldclean:
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list