Skip to content
Snippets Groups Projects
  1. Jan 19, 2016
    • Durham Goode's avatar
      bundle: exit early when there are no commits to bundle · 645e7884
      Durham Goode authored
      Previously, if you passed a revset that resolved to no nodes, it would get
      interpreted by the changegroup discovery logic as 'bundle all my heads', which
      is not what the user asked.
      
      Let's exit early when we notice this case.
      
      It could be argued that the changeset discovery logic should be smarter and only
      assume 'all heads' if the incoming heads parameter is None, but that's a much
      riskier change.
      645e7884
  2. Jan 18, 2016
  3. Jan 14, 2016
    • Simon Farnsworth's avatar
      shelve: permit shelves to contain unknown files · d73a5ab1
      Simon Farnsworth authored
      If an emergency comes in while you're in the middle of an experimental
      change, it can be useful to shelve not just files hg already tracks but
      also your unknown files while you handle the emergency. This is
      especially true if you have hooks intended to prevent you from
      forgetting to add new code before you push.
      
      Teach "hg shelve" to optionally shelve unknown files, not just tracked
      files. This is functionally similar to --addremove, but with two
      differences:
      
       1) Deleted files are not removed.
       2) Files added during shelve creation are tracked in extra so that they
          can be forgotten by "hg unshelve".
      
      When unshelving, we take care to only forget files if they've been
      created during the unshelve operation; if you add a file that's being
      tracked in a shelve as an unknown file, it should not become unknown
      again when the shelve is unshelved.
      d73a5ab1
  4. Jan 17, 2016
    • Gregory Szorc's avatar
      localrepo: don't reference transaction from hook closure (issue5043) · e219dbfd
      Gregory Szorc authored
      Before, the hook() closure (which is called as part of locking hooks)
      would maintain a reference to a transaction instance (which should be
      finalized by the time lock hooks are called). Because we accumulate
      hook() instances when there are multiple transactions per lock, this
      would result in holding references to the transaction instances which
      would lead to higher memory utilization.
      
      Creating a reference to the hook arguments dict minimizes the number
      of objects that are kept alive until the lock release hook runs,
      minimizing memory "leaks."
      e219dbfd
    • Gregory Szorc's avatar
      context: don't use util.cachefunc due to cycle creation (issue5043) · c183f7b7
      Gregory Szorc authored
      util.cachefunc stores all arguments as the cache key. For filectxfn
      functions, the arguments include the memctx instance. This creates a
      cycle where memctx._filectxfn references self. This causes a memory
      leak.
      
      We break the cycle by implementing our own memoizing function that
      only uses the path as the cache key. Since each memctx has its own
      cache instance, there is no concern about invalid cache hits.
      c183f7b7
    • Mads Kiilerich's avatar
    • Mads Kiilerich's avatar
      largefiles: make prompt order deterministic · ee3123e1
      Mads Kiilerich authored
      42ae1b1f048f introduced iteration of a set. Make it stable.
      ee3123e1
    • Mads Kiilerich's avatar
      largefiles: fix commit of missing largefiles · 512a814c
      Mads Kiilerich authored
      832c98d79587 improved merging of standin files referencing missing largefiles.
      It did however not test or fix commits of such merges; it would abort.
      
      To fix that, change copytostore to skip and warn about missing largefiles
      with a message similar the one for failing get from remote filestores. (It
      would perhaps in both cases be better to emit a more helpful warning like
      "warning: standin file for large1 references 58e24f733a which can't be found in
      the local store".)
      
      To test this, make sure commit doesn't find the "missing" largefile in the global
      usercache. For further testing, verify that update and status works as expected
      after this.
      
      This will also effectively backout 63116d47cc3f.
      512a814c
  5. Jan 14, 2016
    • Martin von Zweigbergk's avatar
      diff: don't crash when merged-in addition is copied · 51b6ce25
      Martin von Zweigbergk authored
      Similar to what was explained in the previous commit, the diff code
      expected copy source to be in "ctx1", which is not always the case
      during a merge. This has been broken since before hg 2.0.
      
      Also similar to the previous commit, we fix the problem by fixing up
      the copy dict.
      51b6ce25
    • Martin von Zweigbergk's avatar
      diff: don't crash when merged-in addition was removed (issue4786) · 29c8e35d
      Martin von Zweigbergk authored
      During a merge, if the user removes a file that came from parent 2 and
      did not exist in parent 1, the file's status will be "removed". This
      surprises the diff code, which crashes because it expects removed
      files exist in parent 1. This has been broken since 377124ba6b10
      (trydiff: use 'not in addedset' for symmetry with 'not in removedset',
      2014-12-23).
      
      Fix by fixing up the list of removed file, similar to how we currently
      fix up the list of modified and added files during a merge.
      29c8e35d
    • Martin von Zweigbergk's avatar
      diff: move status fixup earlier, out of _filepairs() · 27572a5c
      Martin von Zweigbergk authored
      This prepares for future patches, and it also lets us remove the ugly
      "ctx1" argument to _filepairs() (ugly because of its assymmetry --
      there's no "ctx2" argument).
      27572a5c
  6. Jan 17, 2016
    • Mads Kiilerich's avatar
      graft: warn when -r is combined with revisions as positional arguments · 78b9fdb8
      Mads Kiilerich authored
      The behaviour in this case is undefined. Instead of silently doing something
      "random" and surprising, at least issue a warning.
      
      (This should perhaps be considered a "deprecation" and turned into an error in
      a future release.)
      78b9fdb8
    • Mads Kiilerich's avatar
      graft: clarify in help that `-r` is not just optional · 2cc44efc
      Mads Kiilerich authored
      Positional parameters are also treated as revisions, but the order of revisions
      matters and it will often be wrong if the user understands it as `-r` taking
      multiple revisions as `-r REV1 REV2`.
      
      (Alternatively, `-r` could be turned into a no-op flag as the documentation
      suggests. That would however be less "semantic markup" and I agree with the
      implementation in 55e7f352b1d3 but not the documentation.)
      2cc44efc
  7. Jan 14, 2016
    • Gregory Szorc's avatar
      streamclone: use backgroundfilecloser (issue4889) · 2fdbf22a
      Gregory Szorc authored
      Closing files that have been appended to is slow on Windows/NTFS.
      CloseHandle() calls on this platform often take 1-10ms - and that's
      on my i7-6700K Skylake processor with a modern and fast SSD. Contrast
      with other I/O operations, such as writing data, which take <100us.
      
      This means that creating/appending thousands of files can add
      significant overhead. For example, cloning mozilla-central creates
      ~232,000 revlog files. Assuming 1ms per CloseHandle(), that yields
      232s (3:52) of wall time waiting for file closes!
      
      The impact of this overhead can be measured most directly when applying
      stream clone bundles. Applying these files is effectively uncompressing
      a tar archive (read: it's very fast).
      
      Using a RAM disk (read: no I/O wait), the difference in wall time for a
      `hg debugapplystreamclonebundle` for a ~1731 MB mozilla-central bundle
      between Windows and Linux from the same machine is drastic:
      
      Linux:    ~12.8s (128MB/s)
      Windows: ~352.0s (4.7MB/s)
      
      Windows is ~27.5x slower. Yikes!
      
      After this patch:
      
      Linux:    ~12.8s (128MB/s)
      Windows: ~102.1s (16.1MB/s)
      
      Windows is now ~3.4x faster. Unfortunately, it is still ~8x slower than
      Linux. Profiling reveals a few hot code paths that could likely be
      improved. But those are for other patches.
      
      This patch introduces test-clone-uncompressed.t because existing tests
      of `clone --uncompressed` are scattered about and adding a variation for
      background thread closing to e.g. test-http.t doesn't feel correct.
      2fdbf22a
  8. Jan 03, 2016
  9. Jan 14, 2016
    • Gregory Szorc's avatar
      scmutil: support background file closing · 2d6a89e7
      Gregory Szorc authored
      Closing files that have been appended to is relatively slow on
      Windows/NTFS. This makes several Mercurial operations slower on
      Windows.
      
      The workaround to this issue is conceptually simple: use multiple
      threads for I/O. Unfortunately, Python doesn't scale well to multiple
      threads because of the GIL. And, refactoring our code to use threads
      everywhere would be a huge undertaking. So, we decide to tackle this
      problem by starting small: establishing a thread pool for closing
      files.
      
      This patch establishes a mechanism for closing file handles on separate
      threads. The coordinator object is basically a queue of file handles to
      operate on and a thread pool consuming from the queue.
      
      When files are opened through the VFS layer, the caller can specify
      that delay closing is allowed.
      
      A proxy class for file handles has been added. We must use a proxy
      because it isn't possible to modify __class__ on built-in types. This
      adds some overhead. But as future patches will show, this overhead
      is cancelled out by the benefit of closing file handles on background
      threads.
      2d6a89e7
  10. Jan 12, 2016
  11. Jan 16, 2016
    • Yuya Nishihara's avatar
      templater: make get(dict, key) return a single value · 83aef8d5
      Yuya Nishihara authored
      This is necessary to obtain a _hybrid object from a dict. If get() yields
      a value, it would be stringified.
      
      I see no benefit to make get() lazy, so this patch just changes "yield" to
      "return".
      83aef8d5
    • Yuya Nishihara's avatar
      templater: make _hybrid not callable to avoid conflicting semantics · ac8c0ee5
      Yuya Nishihara authored
      In templater, a callable symbol exists for lazy evaluation, which should have
      f(**mapping) signature. On the other hand, _hybrid.__call__(), which was
      introduced by 0b241d7a8c62, generates mapping for each element.
      
      This patch renames _hybrid.__call__() to _hybrid.itermaps() so that a _hybrid
      object can be a value of a mapping dict.
      
        {namespaces % "{namespace}: {names % "{name }"}\n"}
                                     ~~~~~
                                     a _hybrid object
      ac8c0ee5
  12. Jan 15, 2016
  13. Jan 14, 2016
  14. Jan 15, 2016
  15. Jan 16, 2016
  16. Jan 14, 2016
  17. Jan 16, 2016
  18. Jan 15, 2016
  19. Jan 14, 2016
    • Matt Mackall's avatar
      mac: ignore resource fork when checking file sizes · f6d1e92f
      Matt Mackall authored
      Some evil evil awful tool adds resource forks to files it's comparing.
      Our Mac-specific code to do bulk stats was accidentally using "total
      size" which includes those forks in the file size, causing them to be
      reported as modified. This changes it to only care about the normal
      data size and thus agree with what Mercurial's expecting.
      f6d1e92f
  20. Jan 13, 2016
  21. Jan 15, 2016
Loading