/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to backend/fileops.py

  • Committer: Szilveszter Farkas (Phanatic)
  • Date: 2006-07-08 17:36:59 UTC
  • mto: (0.14.1 main) (93.1.1 win32.bialix)
  • mto: This revision was merged to the branch mainline in revision 83.
  • Revision ID: Szilveszter.Farkas@gmail.com-20060708173659-8ab442681dadd8ea
2006-07-08  Szilveszter Farkas <Szilveszter.Farkas@gmail.com>

    * backend/errors.py: added some exceptions related to diff() and log()
    * backend/info.py: implemented log()
    * backend/info.py: diff() works well with revnos
    * added e-mail address to copyright header

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
2
2
# Some parts of the code are:
3
3
# Copyright (C) 2005, 2006 by Canonical Ltd
4
 
#
 
4
 
5
5
# This program is free software; you can redistribute it and/or modify
6
6
# it under the terms of the GNU General Public License as published by
7
7
# the Free Software Foundation; either version 2 of the License, or
8
8
# (at your option) any later version.
9
 
#
 
9
 
10
10
# This program is distributed in the hope that it will be useful,
11
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
13
# GNU General Public License for more details.
14
 
#
 
14
 
15
15
# You should have received a copy of the GNU General Public License
16
16
# along with this program; if not, write to the Free Software
17
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22
22
 
23
23
from errors import (DirectoryAlreadyExists, MissingArgumentError,
24
24
                    MultipleMoveError, NoFilesSpecified, NoMatchingFiles,
25
 
                    NonExistingSource, NotBranchError, NotSameBranchError,
26
 
                    NotVersionedError, PermissionDenied)
 
25
                    NonExistingSource, NotVersionedError)
27
26
 
28
 
def add(file_list, recursive=False):
 
27
def add(file_list):
29
28
    """ Add listed files to the branch. 
30
29
    
31
30
    :param file_list - list of files to be added (using full paths)
32
31
    
33
 
    :param recursive - if True, all unknown files will be added
34
 
    
35
32
    :return: count of ignored files
36
33
    """
37
34
    import bzrlib.add
38
35
    
39
 
    try:
40
 
        added, ignored = bzrlib.add.smart_add(file_list, recursive)
41
 
    except errors.NotBranchError:
42
 
        raise NotBranchError
43
 
    except:
44
 
        raise
 
36
    added, ignored = bzrlib.add.smart_add(file_list)
45
37
    
46
38
    match_len = 0
47
39
    for glob, paths in ignored.items():
62
54
        if e.errno == 17:
63
55
            raise DirectoryAlreadyExists(directory)
64
56
    else:
65
 
        try:
66
 
            wt, dd = WorkingTree.open_containing(directory)
67
 
        except errors.NotBranchError:
68
 
            raise NotBranchError
69
 
        else:
70
 
            wt.add([dd])
 
57
        wt, dd = WorkingTree.open_containing(directory)
 
58
        wt.add([dd])
71
59
 
72
60
def move(names_list):
73
61
    """ Move or rename given files.
78
66
    
79
67
    if len(names_list) < 2:
80
68
        raise MissingArgumentError
81
 
    
82
 
    try:
83
 
        tree, rel_names = tree_files(names_list)
84
 
    except errors.NotBranchError:
85
 
        raise NotBranchError
86
 
    except errors.BzrCommandError:
87
 
        # not the same branch presumably
88
 
        raise NotSameBranchError
 
69
    tree, rel_names = tree_files(names_list)
89
70
        
90
71
    if os.path.isdir(names_list[-1]):
91
72
        # move into existing directory
103
84
    
104
85
    :param new: if True, the 'added' files will be removed
105
86
    """
106
 
    import bzrlib
107
87
    from bzrlib.builtins import tree_files
108
88
    
109
 
    try:
110
 
        tree, file_list = tree_files(file_list)
111
 
    except errors.NotBranchError:
112
 
        raise NotBranchError
113
 
    except:
114
 
        raise
 
89
    tree, file_list = tree_files(file_list)
115
90
    
116
91
    if new is False:
117
92
        if file_list is None:
118
93
            raise NoFilesSpecified
119
94
    else:
120
95
        from bzrlib.delta import compare_trees
121
 
        if (bzrlib.version_info[0] == 0) and (bzrlib.version_info[1] < 9):
122
 
            added = [compare_trees(tree.basis_tree(), tree,
123
 
                                   specific_files=file_list).added]
124
 
        else:
125
 
            added = [tree.changes_from(tree.basis_tree(),
126
 
                                       specific_files=file_list).added]
 
96
        added = [compare_trees(tree.basis_tree(), tree,
 
97
                               specific_files=file_list).added]
127
98
        file_list = sorted([f[0] for f in added[0]], reverse=True)
128
99
        if len(file_list) == 0:
129
100
            raise NoMatchingFiles
144
115
        raise NonExistingSource(source)
145
116
    
146
117
    move([source, target])
147
 
 
148
 
def status(filename):
149
 
    """ Get the status of a file.
150
 
    
151
 
    :param filename: the full path to the file
152
 
    
153
 
    :return: renamed | added | removed | modified | unchanged | unknown
154
 
    """
155
 
    import bzrlib
156
 
    from bzrlib.delta import compare_trees
157
 
    from bzrlib.workingtree import WorkingTree
158
 
    
159
 
    try:
160
 
        tree1 = WorkingTree.open_containing(filename)[0]
161
 
    except errors.NotBranchError:
162
 
        return 'unknown'
163
 
    except errors.PermissionDenied:
164
 
        raise PermissionDenied(filename)
165
 
    
166
 
    branch = tree1.branch
167
 
    tree2 = tree1.branch.repository.revision_tree(branch.last_revision())
168
 
    
169
 
    # find the relative path to the given file (needed for proper delta)
170
 
    wtpath = tree1.basedir
171
 
    #print "DEBUG: wtpath =", wtpath
172
 
    fullpath = filename
173
 
    #print "DEBUG: fullpath =", fullpath
174
 
    i = 0
175
 
    wtsplit = wtpath.split('/')
176
 
    fpsplit = fullpath.split('/')
177
 
    fpcopy = fullpath.split('/')
178
 
    for item in fpsplit:
179
 
        if i is not len(wtsplit):
180
 
            if item == wtsplit[i]:
181
 
                del fpcopy[0]
182
 
            i = i + 1
183
 
    rel = '/'.join(fpcopy)
184
 
    #print "DEBUG: rel =", rel
185
 
    
186
 
    if bzrlib.version_info[1] < 9:
187
 
        delta = compare_trees(old_tree=tree2,
188
 
                              new_tree=tree1,
189
 
                              want_unchanged=True,
190
 
                              specific_files=[rel])
191
 
    else:
192
 
        delta = tree1.changes_from(tree2,
193
 
                                   want_unchanged=True,
194
 
                                   specific_files=[rel])
195
 
    
196
 
    """ Debug information (could be usable in the future, so didn't cut out)
197
 
    print "DEBUG: delta.renamed:"
198
 
    for path, id, kind, text_modified, meta_modified in delta.renamed:
199
 
        print path
200
 
    print
201
 
    print "DEBUG: delta.added:"
202
 
    for path, id, kind in delta.added:
203
 
        print path
204
 
    print
205
 
    print "DEBUG: delta.removed:"
206
 
    for path, id, kind, text_modified, meta_modified in delta.removed:
207
 
        print path
208
 
    print
209
 
    print "DEBUG: delta.modified:"
210
 
    for path, id, kind, text_modified, meta_modified in delta.modified:
211
 
        print path
212
 
    print
213
 
    print "DEBUG: delta.unchanged:"
214
 
    for path, id, kind in delta.unchanged:
215
 
        print path
216
 
    """
217
 
    
218
 
    if len(delta.renamed):
219
 
        return 'renamed'
220
 
    elif len(delta.added):
221
 
        return 'added'
222
 
    elif len(delta.removed):
223
 
        return 'removed'
224
 
    elif len(delta.modified):
225
 
        return 'modified'
226
 
    elif len(delta.unchanged):
227
 
        return 'unchanged'
228
 
    else:
229
 
        return 'unknown'