~bzr-pqm/bzr/bzr.dev

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/python

"""Cross-platform os tools: files/directories manipulations
Usage:

    ostools.py help
                    prints this help

    ostools.py copytodir FILES... DIR
                    copy files to specified directory

    ostools.py copytree FILES... DIR
                    copy files to specified directory keeping relative paths

    ostools.py remove [FILES...] [DIRS...]
                    remove files or directories (recursive)
"""

import glob
import os
import shutil
import sys


def main(argv=None):
    if argv is None:
        argv = sys.argv[1:]

    if not argv:
        argv = ['help']

    cmd = argv.pop(0)

    if cmd == 'help':
        print __doc__
        return 0

    if cmd == 'copytodir':
        if len(argv) < 2:
            print "Usage:  ostools.py copytodir FILES... DIR"
            return 1

        todir = argv.pop()
        if not os.path.exists(todir):
            os.makedirs(todir)
        if not os.path.isdir(todir):
            print "Error: Destination is not a directory"
            return 2

        files = []
        for possible_glob in argv:
            files += glob.glob(possible_glob)

        for src in files:
            dest = os.path.join(todir, os.path.basename(src))
            shutil.copy(src, dest)
            print "Copied:", src, "=>", dest

        return 0

    if cmd == 'copytree':
        if len(argv) < 2:
            print "Usage:  ostools.py copytree FILES... DIR"
            return 1

        todir = argv.pop()
        if not os.path.exists(todir):
            os.makedirs(todir)
        if not os.path.isdir(todir):
            print "Error: Destination is not a directory"
            return 2

        files = []
        for possible_glob in argv:
            files += glob.glob(possible_glob)

        for src in files:
            relative_path = src
            dest = os.path.join(todir, relative_path)
            dest_dir = os.path.dirname(dest)
            if not os.path.isdir(dest_dir):
                os.makedirs(dest_dir)
            shutil.copy(src, dest)
            print "Copied:", src, "=>", dest

        return 0

    if cmd == 'remove':
        if len(argv) == 0:
            print "Usage:  ostools.py remove [FILES...] [DIRS...]"
            return 1

        filesdirs = []
        for possible_glob in argv:
            filesdirs += glob.glob(possible_glob)

        for i in filesdirs:
            if os.path.isdir(i):
                shutil.rmtree(i)
                print "Removed:", i
            elif os.path.isfile(i):
                os.remove(i)
                print "Removed:", i
            else:
                print "Not found:", i

        return 0

    print "Usage error"
    print __doc__
    return 1


if __name__ == "__main__":
    sys.exit(main())