view tests/test-minifileset.py @ 36972:28ba7d111337

uncommit: leave empty commit if all files are uncommitted We had instructions for our internal users to add copy information after commit like this: hg uncommit <srcfile> <dstfile> hg cp --after <srcfile> <dstfile> hg amend That usually works, but if the rename was the only change in that commit, then the commit would get pruned. It's easy to fix the recipe: just pass the --keep option. However, it seems too subtle, so I think this is an indication that the commit should not be pruned if any patterns were given. Differential Revision: https://phab.mercurial-scm.org/D2862
author Martin von Zweigbergk <martinvonz@google.com>
date Wed, 14 Mar 2018 11:16:49 -0700
parents 73432eee0ac4
children 2cdae2582d8a
line wrap: on
line source

from __future__ import absolute_import
from __future__ import print_function

import os
import sys

# make it runnable directly without run-tests.py
sys.path[0:0] = [os.path.join(os.path.dirname(__file__), '..')]

from mercurial import minifileset

def check(text, truecases, falsecases):
    f = minifileset.compile(text)
    for args in truecases:
        if not f(*args):
            print('unexpected: %r should include %r' % (text, args))
    for args in falsecases:
        if f(*args):
            print('unexpected: %r should exclude %r' % (text, args))

check('all()', [('a.php', 123), ('b.txt', 0)], [])
check('none()', [], [('a.php', 123), ('b.txt', 0)])
check('!!!!((!(!!all())))', [], [('a.php', 123), ('b.txt', 0)])

check('"path:a" & (**.b | **.c)', [('a/b.b', 0), ('a/c.c', 0)], [('b/c.c', 0)])
check('(path:a & **.b) | **.c',
      [('a/b.b', 0), ('a/c.c', 0), ('b/c.c', 0)], [])

check('**.bin - size("<20B")', [('b.bin', 21)], [('a.bin', 11), ('b.txt', 21)])

check('!!**.bin or size(">20B") + "path:bin" or !size(">10")',
      [('a.bin', 11), ('b.txt', 21), ('bin/abc', 11)],
      [('a.notbin', 11), ('b.txt', 11), ('bin2/abc', 11)])

check('(**.php and size(">10KB")) | **.zip | ("path:bin" & !"path:bin/README") '
      ' | size(">1M")',
      [('a.php', 15000), ('a.zip', 0), ('bin/a', 0), ('bin/README', 1e7)],
      [('a.php', 5000), ('b.zip2', 0), ('t/bin/a', 0), ('bin/README', 1)])