Skip to content
Snippets Groups Projects
  1. Dec 21, 2017
    • Yuya Nishihara's avatar
    • Yuya Nishihara's avatar
      templater: keep default resources per template engine (API) · 32c278eb
      Yuya Nishihara authored
      This allows us to register a repo object as a resource in hgweb template,
      without loosing '{repo}' symbol:
      
        symbol('repo') -> mapping['repo'] (n/a) -> defaults['repo']
        resource('repo') -> mapping['repo'] (n/a) -> resources['repo']
      
      I'm thinking of redesigning the templatekw API to take (context, mapping)
      in place of **(context._resources + mapping), but that will be a big change
      and not implemented yet.
      
      props['templ'] is ported to the resources dict as an example.
      
      .. api::
      
         mapping does not contain all template resources. use context.resource()
         in template functions.
      32c278eb
    • Yuya Nishihara's avatar
      templater: look up mapping table through template engine · d6cfa722
      Yuya Nishihara authored
      These functions are stub for symbol/resource separation. This series is
      intended to address the following problems:
      
       a) internal data may be exposed to user (issue5699)
       b) defaults['repo'] (a repository name) will conflict with mapping['repo']
          (a repo object) in hgweb
      d6cfa722
  2. Dec 19, 2017
  3. Dec 21, 2017
    • Anton Shestakov's avatar
      paper: minor adjustments to table styles · 6915f6a4
      Anton Shestakov authored
      Adding a bit of padding to table columns on e.g. /log means content and headers
      are better aligned: headers already have this padding.
      
      Right margin is removed from #changesetEntry th because elements with display:
      table-cell (such as <th>) ignore margins anyway.
      6915f6a4
  4. Dec 20, 2017
  5. Dec 21, 2017
  6. Dec 20, 2017
    • Jun Wu's avatar
      commandserver: unblock SIGCHLD · 3a119a42
      Jun Wu authored
      This enables the SIGCHLD handler to work properly if some buggy program
      started chg server with SIGCHLD blocked.
      
      A test of this probably requires C code, but we don't have such kind of
      tests already. Since this is a simple and clear fix, I'm leaving it as
      "untested" but I did a manual test and there were no longer zombie workers.
      
      Differential Revision: https://phab.mercurial-scm.org/D1737
      3a119a42
    • Jun Wu's avatar
      osutil: add a function to unblock signals · 8652ab40
      Jun Wu authored
      Signals could be blocked by something like:
      
        #include <unistd.h>
        #include <signal.h>
        int main(int argc, char * const argv[]) {
          sigset_t set;
          sigfillset(&set);
          sigprocmask(SIG_BLOCK, &set, NULL);
          execv("/bin/hg", argv);
          return 0;
        }
      
      One of the problems is if SIGCHLD is blocked, chgserver would not reap
      zombie workers since it depends on SIGCHLD handler entirely.
      
      While it's the parent process to blame but it seems a good idea to just
      unblock the signal from hg. FWIW git does that for SIGPIPE already [1].
      
      Unfortunately Python 2 does not reset or provide APIs to change signal
      masks. Therefore let's add one in osutil. Note: Python 3.3 introduced
      `signal.pthread_sigmask` which solves the problem.
      
      `sigprocmask` is part of POSIX [2] so there is no feature testing in
      `setup.py`.
      
      [1]: https://github.com/git/git/commit/7559a1be8a0afb10df41d25e4cf4c5285a5faef1
      [2]: http://pubs.opengroup.org/onlinepubs/7908799/xsh/sigprocmask.html
      
      Differential Revision: https://phab.mercurial-scm.org/D1736
      8652ab40
  7. Dec 18, 2017
  8. Dec 19, 2017
    • Yuya Nishihara's avatar
      log: make "slowpath" condition slightly more readable · 5bec509d
      Yuya Nishihara authored
      Before 8e0e334bad42 and 6c76c42a5893, the condition was "anypats() or
      (files() and --removed)". This can be read as "<match is actually slow>
      or <walk files including removed revs>". So "not always()" (i.e. walk
      file revs) seems more appropriate here.
      
      The logic should be unchanged:
      
        not anypats() => always() or isexact() or prefix()
        isexact()     => not always()
        prefix()      => not always()
      5bec509d
  9. Dec 18, 2017
  10. Jun 25, 2017
    • Jun Wu's avatar
      split: new extension to split changesets · 02ea370c
      Jun Wu authored
      This diff introduces an experimental split extension to split changesets.
      
      The implementation is largely inspired by Laurent Charignon's implementation
      for mutable-history (changeset 9603aa1ecdfd54b0d86e262318a72e0a2ffeb6cc [1])
      
      This version contains various improvements:
      
        - Rebase by default.
          This is more friendly for new users. Split won't lead to merge conflicts
          so a rebase won't give the user more trouble.
          This has been on by default at Facebook for months now and seems to be a
          good UX improvement.
          The rebase skips obsoleted or orphaned changesets, which can avoid
          issues like allowdivergence, merge conflicts, etc. This is more flexible
          because the user can decide what to do next (see the last test case in
          test-split.t)
      
        - Remove "Done split? [y/n]" prompt.
          That could be detected by checking `repo.status()` instead.
      
        - Works with obsstore disabled.
          Without obsstore, split uses strip to clean up old nodes, and it can
          even handle split a non-head changeset with "allowunstable" disabled,
          since it runs a rebase to solve the "unstable" issue in a same
          transaction.
      
        - More friendly editor text.
          Put what has been already split into the editor text so users won't lost
          track about where they are.
      
      [1]: https://bitbucket.org/marmoute/mutable-history/commits/9603aa1ecdfd54b
      
      Differential Revision: https://phab.mercurial-scm.org/D1082
      02ea370c
  11. Dec 19, 2017
  12. Dec 18, 2017
  13. Dec 17, 2017
    • Matt Harbison's avatar
      run-tests: use context managers for file descriptors · e3177389
      Matt Harbison authored
      I've seen the following error a few times recently when running the tests with
      `yes | ./run-tests.py --local -j9 -i`:
      
      Errored test-add.t: Traceback (most recent call last):
        File "./run-tests.py", line 821, in run
          self.runTest()
        File "./run-tests.py", line 910, in runTest
          if self._result.addOutputMismatch(self, ret, out, self._refout):
        File "./run-tests.py", line 1774, in addOutputMismatch
          rename(test.errpath, test.path)
        File "./run-tests.py", line 571, in rename
          os.remove(src)
      WindowsError: [Error 32] The process cannot access the file because it is being
       used by another process: 'c:\\Users\\Matt\\projects\\hg\\tests\\test-add.t.err'
      
      This change doesn't fix the problem, but it seems like a simple enough
      improvement.
      e3177389
  14. Dec 13, 2017
    • Matt Harbison's avatar
      run-tests: add substitution patterns for common '\' path output on Windows · 24528dba
      Matt Harbison authored
      The goal is to reduce the amount of hand tuning of new/changed tests that is
      required on Windows.  Since the OS prints the proper paths everywhere else, this
      is limited to Windows.  These are based on the check-code rules that were
      dropped in 5feb782c7a95.
      
      There are some minor tweaks, because those were trying to detect '/' paths
      without a '(glob)' at the end, whereas these detect '\' paths. Also, it looks
      like the 'no changes made to subrepo' one was broke, because the path to the
      subrepo has been getting output but was not in the pattern.  End anchors are
      dropped because '(glob)' is no longer required, but '(feature !)' annotations
      are a possibility.
      
      The 'saved backup bundle' pattern dropped from run-tests.py was simply carrying
      over the first capture group.  The replace() method runs prior to evaluating
      '\1', but it wasn't doing anything because of the 'r' prefix on '\\'.
      
      The 'not recording move' entry is new, because I stumbled upon it searching for
      some of these patterns.  There are probably others.
      24528dba
  15. Nov 27, 2017
  16. Dec 16, 2017
  17. Oct 21, 2017
  18. Dec 14, 2017
  19. Dec 12, 2017
  20. Dec 14, 2017
    • Matt Harbison's avatar
      lfs: add git to the User-Agent header for blob transfers · e7bb5fc4
      Matt Harbison authored
      As we were trying to transition off of the non production lfs-test-server for
      further experimenting, one of the problems we ran into was interoperability.  A
      coworker setup gitbucket[1] to act as the blob server, tested with git, and
      passed it off to me.  But push failed with a message saying "abort: LFS server
      returns invalid JSON:", and then proceeded to dump a huge HTML page to the
      screen.  It turns out that it is assuming that git is the only thing that wants
      to do a blob transfer, and everything else is a web browser wanting HTML.
      
      It's only a single data point, but I suspect other things may be doing this too.
      RFC7231 gives an example [2] of listing multiple products in decreasing order of
      significance.  Since the standard provides for this, and since it works with the
      one problematic server I found, I'm just enabling this by default for a better
      UX.
      
      There's nothing significant about the version of git chosen, other than it is
      the current version.
      
      [1] https://github.com/gitbucket/gitbucket/
      [2] https://tools.ietf.org/html/rfc7231#page-46
      e7bb5fc4
    • Hollis Blanchard's avatar
      outgoing: respect ":pushurl" paths (issue5365) · 0ebd94ac
      Hollis Blanchard authored
      Make 'hg outgoing' respect "paths.default:pushurl" in addition to
      "paths.default-push".
      
      'hg outgoing' has always meant "what will happen if I run 'hg push'?" and it's
      still documented that way:
      
          Show changesets not found in the specified destination repository or the
          default push location. These are the changesets that would be pushed if a
          push was requested.
      
      If the user uses the now-deprecated "paths.default-push" path, it continues to
      work that way. However, as described at
      https://bz.mercurial-scm.org/show_bug.cgi?id=5365, it doesn't behave the same
      with "paths.default:pushurl".
      
      Why does it matter? Similar to the bugzilla reporter, I have a read-only mirror
      of a non-Mercurial repository:
      
        upstream -> imported mirror -> user clone
               ^-----------------------/
      
      Users push directly to upstream, and that content is then imported into the
      mirror. However, those repositories are not the same; it's possible that the
      mirroring has either broken completely, or an import process is running and not
      yet complete. In those cases, 'hg outgoing' will list changesets that have
      already been pushed.
      
      Mozilla's desired behavior described in bug 5365 can be accomplished through
      other means (e.g. 'hg outgoing default'), preserving the consistency and
      meaning of 'hg outgoing'.
      0ebd94ac
  21. Dec 15, 2017
  22. Dec 14, 2017
    • Kostia Balytskyi's avatar
      sshpeer: allow for additional environment passing to ssh exe · 31d21309
      Kostia Balytskyi authored
      We already have the ability to customize the ssh command line arguments, let's
      add the ability to customize its environment as well.
      
      Example use-case is ssh.exe from Git on Windows. If `HOME` enviroment variable
      is present and has some non-empty value, ssh.exe will try to access that
      location for some stuff (for example, it seems for resolving `~` in
      `.ssh/config`). Git for Windows seems to sometimess set this variable to the
      value of `/home/username` which probably works under Git Bash, but does not
      work in a native `cmd.exe` or `powershell`. Whatever the root cause, setting
      `HOME` to be an empty string heals things. Therefore, some distributors
      might want to set `sshenv.HOME=` in the configuration (seems less intrusive
      that forcing everyone to tweak their env).
      
      Test Plan:
      - rt
      
      Differential Revision: https://phab.mercurial-scm.org/D1683
      31d21309
    • Martin von Zweigbergk's avatar
      unamend: allow unamending if allowunstable is set · f0110110
      Martin von Zweigbergk authored
      I don't see why unamend should be disallowed when allowunstable is
      set. By switching to rewriteutil.precheck() we fix that and get more
      consistent error messages (and some additional ones).
      
      Differential Revision: https://phab.mercurial-scm.org/D1682
      f0110110
  23. Dec 13, 2017
  24. Dec 12, 2017
    • Wojciech Lis's avatar
      lfs: using workers in lfs prefetch · f98fac24
      Wojciech Lis authored
      This significantly speeds up lfs prefetch. With fast network we are
      seeing ~50% improvement of overall prefetch times
      Because of worker's API in posix we do lose finegrained progress update and only
      see progress when a file finished downloading.
      
      Test Plan:
      Run tests:
      ./run-tests.py -l test-lfs*
      ....
      # Ran 4 tests, 0 skipped, 0 failed.
      Run commands resulting in lfs prefetch e.g. hg sparse --enable-profile
      
      Differential Revision: https://phab.mercurial-scm.org/D1568
      f98fac24
  25. Dec 01, 2017
    • Wojciech Lis's avatar
      worker: make windows workers daemons · 86b8cc1f
      Wojciech Lis authored
      The windows workers weren't daemons and were not correctly killed when ctrl-c'd from the terminal. Withi this change when the main thread is killed, all daemons get killed as well.
      I also reduced the time we give to workers to cleanup nicely to not have people ctrl-c'ing when they get inpatient.
      
      The output when threads clened up nicely:
        PS C:\<dir>> hg.exe sparse --disable-profile SparseProfiles/<profile>.sparse
        interrupted!
      The output when threads don't clenup in 1 sec:
        PS C:\<dir> hg.exe sparse --enable-profile SparseProfiles/<profile>.sparse
        failed to kill worker threads while handling an exception
        interrupted!
        Exception in thread Thread-4 (most likely raised during interpreter shutdown):
        PS C:\<dir>>
      
      Test Plan:
      Run hg command on windows (pull/update/sparse). Ctrl-C'd sparse --enable-profile command that was using threads and observed in proces explorer that all threads got killed.
      ran tests on CentOS
      
      Differential Revision: https://phab.mercurial-scm.org/D1564
      86b8cc1f
  26. Dec 17, 2017
    • Wojciech Lis's avatar
      workers: add config to enable/diable workers · 471918fa
      Wojciech Lis authored
      This adds config to disable/enable workers with default being enabled.
      
      Test Plan:
      enabled profile without updaing .hg/hgrc (the default should be to use workers) and ran
      hg sprase --enable-profile <profile>.sparse
      Watched in the proces explorer that hg started 12 new threads for materializing files (this is my worker.numcpus) value
      
      Added
        [worker]
        enabled = False
      to the .hg/hgrc and re ran the command. This time hg didn't spawn any new threads for matreializing of files
      
      Differential Revision: https://phab.mercurial-scm.org/D1460
      471918fa
    • Yuya Nishihara's avatar
      diff: disable diff.noprefix option for diffstat (issue5759) · 058c7259
      Yuya Nishihara authored
      We could use patch.diffhunks() instead of patch.diff() to get filenames
      without parsing patch content, but that isn't always possible because we
      sometimes feed raw patch data to patch.diffstat().
      058c7259
Loading