/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 olive/backend/fileops.py

  • Committer: Szilveszter Farkas (Phanatic)
  • Date: 2006-08-20 13:02:35 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-20060820130235-62c9c5753f5d8774
Gettext support added.

2006-08-20  Szilveszter Farkas <Szilveszter.Farkas@gmail.com>

    * po/hu.po: added Hungarian traslation
    * Added gettext support to all files.
    * genpot.sh: added olive-gtk.pot generator script

Show diffs side-by-side

added added

removed removed

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