summaryrefslogtreecommitdiff
path: root/scripts/uploadrelease.py
blob: 7fb4a08ec38041b1ac2af29318496ac76c63d48a (plain)
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/python -u
'''
    ADOdb release upload script
'''

import getopt
import glob
import os
from os import path
import subprocess
import sys


# Directories and files to exclude from release tarballs
sf_files = "frs.sourceforge.net:/home/frs/project/adodb" \
           "/adodb-php5-only/adodb-{ver}-for-php5/"
sf_doc = "web.sourceforge.net:/home/project-web/adodb/htdocs/"
rsync_cmd = "rsync -vP --rsh ssh {opt} {src} {usr}@{dst}"

# Command-line options
options = "hfd"
long_options = ["help", "files", "doc"]


def usage():
    print '''Usage: %s [options] username [release_path]

    This script will upload the files in the given directory (or the
    current one if unspecified) to Sourceforge.

    Parameters:
        username                Sourceforge user account
        release_path            Location of the release files to upload
                                (see buildrelease.py)

    Options:
        -h | --help             Show this usage message
        -f | --files            Upload release files only
        -d | --doc              Upload documentation only
''' % (
        path.basename(__file__)
    )
#end usage()


def main():
    # Get command-line options
    try:
        opts, args = getopt.gnu_getopt(sys.argv[1:], options, long_options)
    except getopt.GetoptError, err:
        print str(err)
        usage()
        sys.exit(2)

    if len(args) < 1:
        usage()
        print "ERROR: please specify the Sourceforge user and release_path"
        sys.exit(1)

    upload_files = True
    upload_doc = True

    for opt, val in opts:
        if opt in ("-h", "--help"):
            usage()
            sys.exit(0)

        elif opt in ("-f", "--files"):
            upload_doc = False

        elif opt in ("-d", "--doc"):
            upload_files = False

    # Mandatory parameters
    username = args[0]

    try:
        release_path = args[1]
        os.chdir(release_path)
    except IndexError:
        release_path = os.getcwd()

    # Upload release files
    if upload_files:
        # Get the version number from the zip file to upload
        try:
            zipfile = glob.glob('*.zip')[0]
        except IndexError:
            print "ERROR: release zip file not found in '%s'" % release_path
            sys.exit(1)
        version = zipfile[5:8]

        # Start upload process
        print "ADOdb release upload script"

        target = sf_files.format(ver=version)
        print
        print "Uploading release files..."
        print "  Target: " + target
        print
        subprocess.call(
            rsync_cmd.format(
                usr=username,
                opt="--exclude=docs",
                src=path.join(release_path, "*"),
                dst=target
            ),
            shell=True
        )

    # Upload documentation
    if upload_doc:
        print
        print "Uploading documentation..."
        print
        subprocess.call(
            rsync_cmd.format(
                usr=username,
                opt="",
                src=path.join(release_path, "docs", "*"),
                dst=sf_doc
            ),
            shell=True
        )

#end main()

if __name__ == "__main__":
    main()