mercurial/fancyopts.py
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
Sat, 09 Jun 2007 01:04:28 -0300
changeset 4531 b51a8138292a
parent 3749 f9567a7fa3b3
child 5145 88803a69b24a
permissions -rw-r--r--
Avoid extra filelogs entries. Right now, there are some situations in which localrepo.filecommit can create filelog entries even though they're not needed. For example: - permissions for a file have changed; - qrefresh can create a filelog entry identical to its parent (see the added test); - convert-repo creates extra filelog entries in every merge where the first parent has added files (for example, changeset ebebe9577a1a of the kernel repo added extra filelog entries to files in the arch/blackfin directory, even though the merge should only touch the drivers/ata directory). This makes "hg log file" in a converted repo less useful than it could be, since it may mention many merges that don't actually touch that specific file. They all come from the same basic problem: localrepo.commit (through filecommit) creates new filelog entries for all files passed to it (except for some cases during a merge). Patch and test case provided by Benoit. This should fix issue351.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
667
31a9aa890016 A number of minor fixes to problems that pychecker found.
mark.williamson@cl.cam.ac.uk
parents: 608
diff changeset
     1
import getopt
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     2
596
9a8daeff0ffa A bunch of parsing/help updates
mpm@selenic.com
parents: 560
diff changeset
     3
def fancyopts(args, options, state):
1541
bf4e7ef08741 fixed some stuff pychecker shows, marked unclear/wrong stuff with XXX
twaldmann@thinkmo.de
parents: 1056
diff changeset
     4
    long = []
bf4e7ef08741 fixed some stuff pychecker shows, marked unclear/wrong stuff with XXX
twaldmann@thinkmo.de
parents: 1056
diff changeset
     5
    short = ''
bf4e7ef08741 fixed some stuff pychecker shows, marked unclear/wrong stuff with XXX
twaldmann@thinkmo.de
parents: 1056
diff changeset
     6
    map = {}
bf4e7ef08741 fixed some stuff pychecker shows, marked unclear/wrong stuff with XXX
twaldmann@thinkmo.de
parents: 1056
diff changeset
     7
    dt = {}
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     8
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
     9
    for s, l, d, c in options:
1056
34be48b4ca85 Map long option names containing dashes to ones containing underscores.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
    10
        pl = l.replace('-', '_')
34be48b4ca85 Map long option names containing dashes to ones containing underscores.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
    11
        map['-'+s] = map['--'+l] = pl
34be48b4ca85 Map long option names containing dashes to ones containing underscores.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
    12
        state[pl] = d
34be48b4ca85 Map long option names containing dashes to ones containing underscores.
Bryan O'Sullivan <bos@serpentine.com>
parents: 981
diff changeset
    13
        dt[pl] = type(d)
3749
f9567a7fa3b3 additional fixes for issue436
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3742
diff changeset
    14
        if (d is not None and d is not True and d is not False and
f9567a7fa3b3 additional fixes for issue436
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3742
diff changeset
    15
            not callable(d)):
959
0aaeee519c66 Fix option parsing bug for empty short options
mpm@selenic.com
parents: 667
diff changeset
    16
            if s: s += ':'
0aaeee519c66 Fix option parsing bug for empty short options
mpm@selenic.com
parents: 667
diff changeset
    17
            if l: l += '='
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    18
        if s: short = short + s
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    19
        if l: long.append(l)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    20
293
11d64332a1cb hg help improvements
mpm@selenic.com
parents: 209
diff changeset
    21
    opts, args = getopt.getopt(args, short, long)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    22
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    23
    for opt, arg in opts:
3673
eb0b4a2d70a9 white space and line break cleanups
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1541
diff changeset
    24
        if dt[map[opt]] is type(fancyopts): state[map[opt]](state, map[opt], arg)
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    25
        elif dt[map[opt]] is type(1): state[map[opt]] = int(arg)
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    26
        elif dt[map[opt]] is type(''): state[map[opt]] = arg
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    27
        elif dt[map[opt]] is type([]): state[map[opt]].append(arg)
3742
86c1d1d35593 Fix argument handling for hg -v pull -v x (issue 436)
Matt Mackall <mpm@selenic.com>
parents: 3673
diff changeset
    28
        elif dt[map[opt]] is type(None): state[map[opt]] = True
3749
f9567a7fa3b3 additional fixes for issue436
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 3742
diff changeset
    29
        elif dt[map[opt]] is type(False): state[map[opt]] = True
209
63af1db35611 Beginning of new command parsing interface
mpm@selenic.com
parents: 164
diff changeset
    30
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    31
    return args
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
    32