/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

  • Committer: wang
  • Date: 2006-10-29 13:41:32 UTC
  • mto: (2104.4.1 wang_65714)
  • mto: This revision was merged to the branch mainline in revision 2109.
  • Revision ID: wang@ubuntu-20061029134132-3d7f4216f20c4aef
Replace python's difflib by patiencediff because the worst case 
performance is cubic for difflib and people commiting large data 
files are often hurt by this. The worst case performance of patience is 
quadratic. Fix bug 65714.

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())