/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to tools/win32/ostools.py

Implement _bisect_recursive, which uses multiple bisect calls to
handle renames and finding entries in subdirs.
As is, this could be hooked into paths2ids() if the dirstate has not been loaded yet.
However, it doesn't quite provide enough, since the parsed entries would probably not
be saved. Further, the multiple bisect calls are less efficient then they could be,
because they do not remember the last bisect call.
We should explore switching to a caching structure, which maintains all records that
have been processed, in a structure that can be in-memory searched before going back
to disk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
 
 
3
"""Cross-platform os tools: files/directories manipulations
 
4
Usage:
 
5
 
 
6
    ostools.py help
 
7
                    prints this help
 
8
 
 
9
    ostools.py copytodir FILES... DIR
 
10
                    copy files to specified directory
 
11
 
 
12
    ostools.py remove [FILES...] [DIRS...]
 
13
                    remove files or directories (recursive)
 
14
"""
 
15
 
 
16
import glob
 
17
import os
 
18
import shutil
 
19
import sys
 
20
 
 
21
 
 
22
def main(argv=None):
 
23
    if argv is None:
 
24
        argv = sys.argv[1:]
 
25
 
 
26
    if not argv:
 
27
        argv = ['help']
 
28
 
 
29
    cmd = argv.pop(0)
 
30
 
 
31
    if cmd == 'help':
 
32
        print __doc__
 
33
        return 0
 
34
 
 
35
    if cmd == 'copytodir':
 
36
        if len(argv) < 2:
 
37
            print "Usage:  ostools.py copytodir FILES... DIR"
 
38
            return 1
 
39
 
 
40
        todir = argv.pop()
 
41
        if not os.path.exists(todir):
 
42
            os.makedirs(todir)
 
43
        if not os.path.isdir(todir):
 
44
            print "Error: Destination is not a directory"
 
45
            return 2
 
46
 
 
47
        files = []
 
48
        for possible_glob in argv:
 
49
            files += glob.glob(possible_glob)
 
50
 
 
51
        for src in files:
 
52
            dest = os.path.join(todir, os.path.basename(src))
 
53
            shutil.copy(src, dest)
 
54
            print "Copied:", src, "=>", dest
 
55
 
 
56
        return 0
 
57
 
 
58
    if cmd == 'remove':
 
59
        if len(argv) == 0:
 
60
            print "Usage:  ostools.py remove [FILES...] [DIRS...]"
 
61
            return 1
 
62
 
 
63
        filesdirs = []
 
64
        for possible_glob in argv:
 
65
            filesdirs += glob.glob(possible_glob)
 
66
 
 
67
        for i in filesdirs:
 
68
            if os.path.isdir(i):
 
69
                shutil.rmtree(i)
 
70
                print "Removed:", i
 
71
            elif os.path.isfile(i):
 
72
                os.remove(i)
 
73
                print "Removed:", i
 
74
            else:
 
75
                print "Not found:", i
 
76
 
 
77
        return 0
 
78
 
 
79
    print "Usage error"
 
80
    print __doc__
 
81
    return 1
 
82
 
 
83
 
 
84
if __name__ == "__main__":
 
85
    sys.exit(main())