~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

  • Committer: Robert Collins
  • Date: 2008-08-04 07:29:51 UTC
  • mto: This revision was merged to the branch mainline in revision 3603.
  • Revision ID: robertc@robertcollins.net-20080804072951-tdue3y4bp9893yx9
Add support for -x or --exclude to bzr commit, fixing bug 3117. (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
87
87
    if file_list is None or len(file_list) == 0:
88
88
        return WorkingTree.open_containing(default_branch)[0], file_list
89
89
    tree = WorkingTree.open_containing(osutils.realpath(file_list[0]))[0]
 
90
    return tree, safe_relpath_files(tree, file_list)
 
91
 
 
92
 
 
93
def safe_relpath_files(tree, file_list):
 
94
    """Convert file_list into a list of relpaths in tree.
 
95
 
 
96
    :param tree: A tree to operate on.
 
97
    :param file_list: A list of user provided paths or None.
 
98
    :return: A list of relative paths.
 
99
    :raises errors.PathNotChild: When a provided path is in a different tree
 
100
        than tree.
 
101
    """
 
102
    if file_list is None:
 
103
        return None
90
104
    new_list = []
91
105
    for filename in file_list:
92
106
        try:
93
107
            new_list.append(tree.relpath(osutils.dereference_path(filename)))
94
108
        except errors.PathNotChild:
95
109
            raise errors.FileInWrongBranch(tree.branch, filename)
96
 
    return tree, new_list
 
110
    return new_list
97
111
 
98
112
 
99
113
# TODO: Make sure no commands unconditionally use the working directory as a
2106
2120
    committed.  If a directory is specified then the directory and everything 
2107
2121
    within it is committed.
2108
2122
 
 
2123
    When excludes are given, they take precedence over selected files.
 
2124
    For example, too commit only changes within foo, but not changes within
 
2125
    foo/bar::
 
2126
 
 
2127
      bzr commit foo -x foo/bar
 
2128
 
2109
2129
    If author of the change is not the same person as the committer, you can
2110
2130
    specify the author's name using the --author option. The name should be
2111
2131
    in the same format as a committer-id, e.g. "John Doe <jdoe@example.com>".
2141
2161
    _see_also = ['bugs', 'uncommit']
2142
2162
    takes_args = ['selected*']
2143
2163
    takes_options = [
 
2164
            ListOption('exclude', type=str, short_name='x',
 
2165
                help="Do not consider changes made to a given path."),
2144
2166
            Option('message', type=unicode,
2145
2167
                   short_name='m',
2146
2168
                   help="Description of the new revision."),
2195
2217
 
2196
2218
    def run(self, message=None, file=None, verbose=False, selected_list=None,
2197
2219
            unchanged=False, strict=False, local=False, fixes=None,
2198
 
            author=None, show_diff=False):
 
2220
            author=None, show_diff=False, exclude=None):
2199
2221
        from bzrlib.errors import (
2200
2222
            PointlessCommit,
2201
2223
            ConflictsInTree,
2245
2267
                raise errors.BzrCommandError(
2246
2268
                    "please specify either --message or --file")
2247
2269
            if file:
2248
 
                my_message = codecs.open(file, 'rt', 
 
2270
                my_message = codecs.open(file, 'rt',
2249
2271
                                         bzrlib.user_encoding).read()
2250
2272
            if my_message == "":
2251
2273
                raise errors.BzrCommandError("empty commit message specified")
2256
2278
                        specific_files=selected_list,
2257
2279
                        allow_pointless=unchanged, strict=strict, local=local,
2258
2280
                        reporter=None, verbose=verbose, revprops=properties,
2259
 
                        author=author)
 
2281
                        author=author,
 
2282
                        exclude=safe_relpath_files(tree, exclude))
2260
2283
        except PointlessCommit:
2261
2284
            # FIXME: This should really happen before the file is read in;
2262
2285
            # perhaps prepare the commit; get the message; then actually commit