#-*- coding: utf-8 -*- #!/usr/bin/env python # ==================================================================== # # svnchanged_export.py # # Export Files in a revision Range # Usage: svnchanged_ftp.py -r beginRev --username user --password passwd --ftphost --ftpuser --ftppassword --ftppath localPath # Author: Rock Sun( http://rocksun.cn ) # Site: http://rocksun.cn/svnchanged-export/ # ==================================================================== import pysvn # http://pysvn.tigris.org/ import getopt, sys, time, string import os, urllib from urlparse import urlparse from ftplib import FTP # Options by default localPath = "." remotePath = "." username = "" password = "" ftphost = "" ftpuser = "" ftppassword = "" ftppath = "" revision_min = pysvn.Revision( pysvn.opt_revision_kind.number, 1000000000) hasRevision = False try: optlist, args = getopt.getopt (sys.argv[1:], "r:u:p:", ["revision=", "username=", "password=", "ftphost=", "ftpuser=", "ftppassword=", "ftppath="]) if len(args) == 1 : localPath = args[0] for option, value in optlist: if option == "--username" or option == "-u": username = value elif option == "--password" or option == "-p": password = value elif option == "--revision" or option == "-r": revision = pysvn.Revision( pysvn.opt_revision_kind.number, int(value)) elif option == "--ftphost": ftphost = value elif option == "--ftpuser" : ftpuser = value elif option == "--ftppassword" : ftppassword = value elif option == "--ftppath" : ftppath = value else: raise Exception ("Unknown option " + str(option)) if ftphost=="": raise Exception ("Please Input Remote Host") except getopt.error, reason: raise Exception ("Usage: " + sys.argv[0] + ": " + str(reason)) print ftphost+":"+ftpuser+":"+ftppassword+":"+ftppath+":"+localPath def get_login( realm, user, may_save ): return True, username, password, False client = pysvn.Client() if username != "" and password != "": client.callback_get_login = get_login ftp = FTP(ftphost) ftp.login(ftpuser, ftppassword) ftp.cwd(ftppath) bufsize = 1024 changes = client.status(localPath) for changed in changes: if changed.entry is not None: if pysvn.node_kind.file == changed.entry.kind : if pysvn.wc_status_kind.added == changed.text_status or pysvn.wc_status_kind.modified == changed.text_status: #print changed['path'].find(localPath) filename = changed['path'][len(localPath)+1:].replace("\\","/") print filename file_handler = open(changed['path'],'rb') ftp.storbinary('STOR '+filename,file_handler,bufsize) """ ftp = FTP(ftphost) ftp.login(ftpuser, ftppassword) ftp.cwd(ftppath) ftp.dir() bufsize = 1024 filename='rockwp/test.php' file_handler = open(filename,'rb') ftp.storbinary('STOR '+filename,file_handler,bufsize) """