Skip to content
Snippets Groups Projects
  1. Jan 03, 2018
    • Matt Harbison's avatar
      lfs: use the local store method for opening a blob · e8f80529abeb
      Matt Harbison authored
      I noticed that when I cloned without updating and then turned around and pushed
      that clone to an lfs server, it was only trying to find the blob in the local
      store.
      
      Writes to the dummyremote (file based store) use local.read(), which looks at
      both the usercache and local store.
      e8f80529abeb
    • Matt Harbison's avatar
      lfs: add a local store method for opening a blob · 83903433c2eb
      Matt Harbison authored
      The has() and read() methods already dynamically switch between the usercache
      and local store.  This should generally be preferred to directly accessing the
      vfs instances outside of the store.
      
      The file is now explicitly opened in binary mode for clarity.  (It was also
      being opened in binary mode before, but only because vfs.__call__() appends 'b'
      if needed when not opening with 'text=True'.)
      83903433c2eb
  2. Jan 05, 2018
  3. Jan 03, 2018
    • Anton Shestakov's avatar
      monoblue: adjust font size of graph entries · 45ed821b5ce4
      Anton Shestakov authored
      /shortlog uses 1.1em font for changesets, so it makes sense to use the same
      size on /graph too. In practice, 1.2em is 14.784px, and 1.1em is 13.552px.
      45ed821b5ce4
    • Anton Shestakov's avatar
      hgweb: make .info a block element by default · ab9d8d298510
      Anton Shestakov authored
      Using a <div> instead of a <span> with "display: block" makes more sense.
      
      While at it, let's adjust top margin in monoblue so that text in .info doesn't
      overlap changeset "tags" elements (they are quite large in monoblue).
      ab9d8d298510
  4. Dec 25, 2017
    • Gregory Szorc's avatar
      revlog: don't use slicing to return parents · a0fab647a8f1
      Gregory Szorc authored
      This is the only place we use a slice on index entries, which
      are currently tuples. In preparation for moving away from tuples,
      let's stop using slices so we don't have to implement that support
      on the new type.
      
      We also tweak the logic slightly so the exception only catches the
      IndexError on the index lookup, not on the index entry lookup. The
      old code should never have been buggy. But it was semantically wrong.
      
      Differential Revision: https://phab.mercurial-scm.org/D1764
      a0fab647a8f1
  5. Jan 05, 2018
  6. Dec 26, 2017
  7. Jan 01, 2018
  8. Dec 30, 2017
    • Matt Harbison's avatar
      osutil: implement getfsmountpoint() on BSD systems · e01549a7bf0a
      Matt Harbison authored
      I don't have a BSD system handy to test this, but it looks simple enough from
      the man page.
      e01549a7bf0a
    • Matt Harbison's avatar
      debugfs: display the tested path and mount point of the filesystem, if known · 5880318624c9
      Matt Harbison authored
      While implementing win32.getfstype(), I noticed that MSYS path mangling is
      getting in the way.  Given a path \\host\share\dir:
      
        - If strong quoted, hg receives it unchanged, and it works as expected
        - If double quoted, it converts to \host\share\dir
        - If unquoted, it converts to \hostsharedir
      
      The second and third cases are problematic because those are valid paths
      relative to the current drive letter, so os.path.realpath() will expand it as
      such.  The net effect is to silently turn a network path test into (typically) a
      "C:\" test.  Additionally, the command hangs after printing out 'symlink: no'
      for the third case (but is interruptable with Ctrl + C).  This path mangling
      only comes into play because of the command line arguments- it won't affect
      internally obtained paths.  Therefore, the simplest thing to do is to provide
      feedback on what the command is acting on.
      
      I also added the mount point, because Windows supports nesting [1] volumes (see
      the examples in "Junction Points and Mounted Folders"), and it was a useful
      diagnostic for figuring out why the wrong filesystem was printed out in the
      cases above.
      
      I opted not to call os.path.realpath() on the path argument, to make it clearer
      that the mangling isn't being done by Mercurial.
      
      [1] https://msdn.microsoft.com/en-us/library/windows/desktop/aa364996(v=vs.85).aspx
      5880318624c9
    • Matt Harbison's avatar
      util: add a function to show the mount point of the filesystem · c4caf530b1c7
      Matt Harbison authored
      For now, this is Windows only, since Linux doesn't have the value in its statfs
      structure, and I don't have a BSD system to test with.
      c4caf530b1c7
    • Matt Harbison's avatar
      win32: split a utility function to obtain the volume out of getfstype() · 5cc1becd0493
      Matt Harbison authored
      This is only done on Windows because it's simple enough to call statfs() on
      Unix.  The goal is to display this in `hg debugfs`.
      5cc1becd0493
  9. Dec 31, 2017
  10. Dec 30, 2017
    • Matt Harbison's avatar
      win32: implement util.getfstype() · 2062f7c2ac83
      Matt Harbison authored
      This will allow NTFS to be added to the hardlink whitelist, and resume creating
      hardlinks in transactions (which was disabled globally in 07a92bbd02e5; see also
      e5ce49a30146).  I opted to report "cifs" for remote volumes because this shows
      in `hg debugfs`, which also reports that hardlinks are supported for these
      volumes.  So being able to distinguish it from "unknown" seems useful.
      
      The documentation [1] seems to indicate that SMB isn't supported by these
      functions, but experimenting shows that mapped drives are reported as "NTFS" on
      Windows 7.  I don't have a second Windows machine, but instead shared a temp
      directory on C:\.  In this setup, both of the following were detected as 'cifs'
      with the explicit GetDriveType() check:
      
        Z:\repo>hg ci -A
      
        C:\>hg -R \\hostname\temp\repo ci -A   # (without Z:\ being mapped)
      
      It looks like this is called 6 times to add and commit a single new file, so I'm
      a little surprised this isn't cached.
      
      [1] https://msdn.microsoft.com/en-us/library/windows/desktop/aa364993(v=vs.85).aspx
      2062f7c2ac83
  11. Dec 31, 2017
  12. Dec 22, 2017
  13. Dec 27, 2017
  14. Dec 23, 2017
    • Matt Harbison's avatar
      lfs: show a friendly message when pushing lfs to a server without lfs enabled · fa865878a849
      Matt Harbison authored
      Upfront disclaimer: I don't know anything about the wire protocol, and this was
      pretty much cargo-culted from largefiles, and then clonebundles, since it seems
      more modern.  I was surprised that exchange.push() will ensure all of the proper
      requirements when exchanging between two local repos, but doesn't care when one
      is remote.
      
      All this new capability marker does is inform the client that the extension is
      enabled remotely.  It may or may not contain commits with external blobs.
      
      Open issues:
      
        - largefiles uses 'largefiles=serve' for its capability.  Someday I hope to
          be able to push lfs blobs to an `hg serve` instance.  That will probably
          require a distinct capability.  Should it change to '=serve' then?  Or just
          add an 'lfs-serve' capability then?
      
        - The flip side of this is more complicated.  It looks like largefiles adds an
          'lheads' command for the client to signal to the server that the extension
          is loaded.  That is then converted to 'heads' and sent through the normal
          wire protocol plumbing.  A client using the 'heads' command directly is
          kicked out with a message indicating that the largefiles extension must be
          loaded.  We could do similar with 'lfsheads', but then a repo with both
          largefiles and lfs blobs can't be pushed over the wire.  Hopefully somebody
          with more wire protocol experience can think of something else.  I see
          'x-hgarg-1' on some commands in the tests, but not on heads, and didn't dig
          any further.
      fa865878a849
  15. Dec 24, 2017
    • Matt Harbison's avatar
      lfs: allow non-lfs exchanges when the extension is only enabled on one side · 2526579a30e0
      Matt Harbison authored
      Once the 'lfs' requirement is added, the extension must be loaded on both sides,
      and changegroup3 used.  But there's no reason that I can see for bailing with
      cryptic errors if lfs is not required, but randomly enabled somewhere.
      2526579a30e0
    • Matt Harbison's avatar
      lfs: add the 'lfs' requirement in the changegroup transaction introducing lfs · 6bb940de4c4c
      Matt Harbison authored
      A hook like this is how largefiles manages to do the same.  Largefiles uses a
      changegroup hook, but this uses pretxnchangegroup because that actually causes
      the transaction to rollback in the unlikely event that writing the requirements
      out fails.  Sadly, the requires file itself isn't rolled back if a subsequent
      hook fails, but that seems trivial.
      
      Now that commit, changegroup and convert are covered, I don't think there's any
      way to get an lfs repo without the requirement.
      
      The grep exit code is blotted out of some test-lfs-serve.t tests now showing the
      requirement, because run-tests.py doesn't support conditionalizing the exit
      code.
      6bb940de4c4c
  16. Dec 23, 2017
    • Matt Harbison's avatar
      test-lfs: add tests covering http exchanges · bbcd2e478391
      Matt Harbison authored
      This tries to test every combination of having the extension enabled/disabled
      on each side, and then push/pull/clone/identify lfs and non-lfs content.  SSH is
      ignored here, because there's enough going on as it is.
      
      The root issue here is again that requirements are not exchanged and preserved
      on push/pull/clone.  Doing so should eliminate the cryptic error messages when
      using `hg serve`.  The 500 server error is triggered by "ValueError: no common
      changegroup version", because the extension forces changegroup3.  Or, if
      changegroup3 is enabled manually, it is triggered by "abort: missing processor
      for flag '0x2000'!".
      
      Sadly, run-tests.py doesn't support conditionalizing the exit code like it does
      lines of output.  Therefore, a couple of tests blot out the exit code by
      appending "|| true", since these failures will go away shortly anyway.
      bbcd2e478391
  17. Dec 22, 2017
    • Matt Harbison's avatar
      test-lfs: add tests covering local exchanges · 67611e06ff08
      Matt Harbison authored
      The root issue here is that requirements are not exchanged and preserved on
      push/pull.  This can be handled with a changegroup hook.  Testing for remote
      exchanges is much more extensive (it's possible for one process or the other to
      not have the extension loaded at all), so it is added separately.
      67611e06ff08
  18. Dec 27, 2017
    • Gregory Szorc's avatar
      smartset: split generatorset classes to avoid cycle · 12a46ad67a3c
      Gregory Szorc authored
      I uncovered a cycle manifesting in a memory leak by running
      `hgperfrevset '::tip'`. The cycle was due to generatorset.__init__
      assigning a bound method to self.__contains__. Internet sleuthing
      revealed that assigning a bound method to an instance attribute
      always creates a cycle.
      
      This commit creates two new variants of generatorset for the special
      cases of ascending and descending generators. The special
      implementations of __contains__ have been extracted to these classes
      where they are defined as __contains__.
      
      generatorset now implements __new__ and changes the spawned type to
      one of the new classes if needed.
      
      Differential Revision: https://phab.mercurial-scm.org/D1780
      12a46ad67a3c
    • Phil Cohen's avatar
      merge: raise before running mergedriver if using IMM · 87918218da70
      Phil Cohen authored
      Merge driver scripts run in the working copy, so disable with IMM for now.
      
      Differential Revision: https://phab.mercurial-scm.org/D1781
      87918218da70
  19. Dec 26, 2017
  20. Dec 25, 2017
  21. Dec 19, 2017
    • Pulkit Goyal's avatar
      commands: use the new API to access hidden changesets in various commands · b378a3d840ab
      Pulkit Goyal authored
      In previous patches, we have added an internal API to unhide hidden changesets.
      This patch makes the following command use that api in nowarn mode i.e. there
      will be no warning while accessing hidden changesets.
      
      cat, diff, export, files, heads, identify, log, manifest, parents, status
      
      This patch also adds test demonstarting the behaviour.
      
      .. feature:: Accessing hidden changesets
      
          Set config option 'experimental.directaccess = True' to access hidden
          changesets from read only commands.
      
      Differential Revision: https://phab.mercurial-scm.org/D1735
      b378a3d840ab
  22. Dec 14, 2017
    • Pulkit Goyal's avatar
      scmutil: add utility fn to return repo object with user passed revs unhidden · 8bb90cc4668e
      Pulkit Goyal authored
      There has been a need for accessing hidden changesets by default without passing
      --hidden. This is currently done using the directaccess extension but is bit
      hacky.
      
      This patch adds a utility function to return a repo object having user passed
      revisions unhidden. This functionality will live behind a
      config option and won't be the default behaviour. There is also a config option
      added by this patch which tells whether we want to unhide only those revisions
      whose hashes are passed or should we consider revisions numbers also.
      
      Differential Revision: https://phab.mercurial-scm.org/D1733
      8bb90cc4668e
  23. Dec 18, 2017
  24. Dec 14, 2017
  25. Dec 22, 2017
  26. Dec 24, 2017
  27. Dec 22, 2017
  28. Dec 23, 2017
    • Gregory Szorc's avatar
      run-tests: extract sorting of tests to own function · 212a6e9aecb0
      Gregory Szorc authored
      TestRunner._run() is a large function and is difficult to follow.
      Let's extract the test sorting to its own function to make it shorter.
      
      When I refactored run-tests.py several years ago, I put a lot of
      functionality in methods. The prevailing Mercurial style is to use
      functions - not classes - where possible. While refactoring the code,
      I decided to undo this historical mistake of mine by moving the code
      to a standalone function.
      
      Differential Revision: https://phab.mercurial-scm.org/D1750
      212a6e9aecb0
  29. Dec 22, 2017
Loading