usage = '''\
post-to-tigris.py <username> <password> <folderId> <release>
username - Your tigris.org username
password - Your tigris.org password
folderId - the folderId of the place to post the files. This can be
gleaned from the URL in the file manager. For example:
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=1079
has a folderId of 1079
release - the full name of the release, such as 1.5.0-beta1
'''
import sys, cookielib, re
try:
from urllib.parse import urlencode as urllib_parse_urlencode
from urllib.request import build_opener as urllib_request_build_opener
from urllib.request import HTTPCookieProcessor as urllib_request_HTTPCookieProcessor
from urllib.request import Request as urllib_request_Request
except ImportError:
from urllib import urlencode as urllib_parse_urlencode
from urllib2 import build_opener as urllib_request_build_opener
from urllib2 import HTTPCookieProcessor as urllib_request_HTTPCookieProcessor
from urllib2 import Request as urllib_request_Request
def login(username, password, folderId):
'''Login to tigris.org, using the provided username and password.
Return the OpenDirector object for future use.'''
cj = cookielib.CookieJar()
opener = urllib_request_build_opener(urllib_request_HTTPCookieProcessor(cj))
folderURL = 'http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=%d' % folderId,
params = {
'detour' : folderURL,
'loginID' : username,
'password' : password,
}
request = urllib_request_Request('http://www.tigris.org/servlets/TLogin',
urllib_parse_urlencode(params))
opener.open(request)
return opener
def get_md5sums():
"Open 'md5sums', and return a filename->checksum hash of the contents"
f = open('md5sums')
sums = {}
for line in f:
line_parts = line.split()
sums[line_parts[1]] = line_parts[0]
return sums
def add_items(opener, folderId, release_name):
"Add the 12(!) items for a release to the given folder"
folder_add_url = 'http://subversion.tigris.org/servlets/ProjectDocumentAdd?folderID=%d&action=Add%%20document' % folderId
if re.match('^\d*\.\d*\.\d*$', release_name):
status = 'Stable'
else:
status = 'Draft'
md5sums = get_md5sums()
for ext in ['.zip', '.tar.gz', '.tar.bz2']:
for deps in ['', '-deps']:
filename = 'subversion%s-%s%s' % (deps, release_name, ext)
desc = 'Subversion %s' % release_name
if deps:
desc = desc + ' Dependencies'
params = {
'name' : filename,
'status' : status,
'description' : '%s (MD5: %s)' % (desc, md5sums[filename]),
'type': 'link',
'url': 'http://subversion.tigris.org/downloads/%s' % filename,
'maxDepth': '',
}
request = urllib_request_Request(folder_add_url,
urllib_parse_urlencode(params))
opener.open(request)
filename = filename + '.asc'
params['name'] = filename
params['description'] = 'PGP signatures for %s' % desc
params['url'] = 'http://subversion.tigris.org/downloads/%s' % \
filename
request = urllib_request_Request(folder_add_url,
urllib_parse_urlencode(params))
opener.open(request)
def main():
if len(sys.argv) < 5:
print(usage)
sys.exit(-1)
folderId = int(sys.argv[3])
opener = login(sys.argv[1], sys.argv[2], folderId)
add_items(opener, folderId, sys.argv[4])
if __name__ == '__main__':
main()