def main(): """ Script execution starts here. """ parser = OptionParser(usage=USAGE) parser.add_option("-u", "", dest="username", help="commit the changes as USERNAME") parser.add_option("-p", "", dest="password", help="commit the changes with PASSWORD") parser.add_option("-r", "", dest="rev", help="revision range") (options, args) = parser.parse_args() if len(args) != 1: parser.print_help() sys.exit(1) csvn.core.svn_cmdline_init("", csvn.core.stderr) repos_url = args[0] revs = options.rev if revs and ":" in revs: [start_rev, end_rev] = revs.split(":") elif revs: start_rev = revs end_rev = revs else: start_rev = 1 end_rev = "HEAD" session = RemoteRepository(repos_url, user=User(options.username, options.password)) if end_rev == "HEAD": end_rev = session.latest_revnum() if start_rev == "HEAD": start_rev = session.latest_revnum() start_rev = int(start_rev) end_rev = int(end_rev) for entry in session.log(start_rev, end_rev): new_log = re.sub(r'(r\d+)', repl_newrev, entry.message) session.revprop_set(propname='svn:log', propval=new_log, revnum=entry.revision, force=True)
class RemoteRepositoryTestCase(unittest.TestCase): def setUp(self): dumpfile = open( os.path.join(os.path.split(__file__)[0], 'test.dumpfile')) # Just in case a previous test instance was not properly cleaned up self.remove_from_disk() self.repos = LocalRepository(repos_location, create=True) self.repos.load(dumpfile) self.repos = RemoteRepository(repos_url) def tearDown(self): self.repos.close() self.remove_from_disk() self.repos = None def remove_from_disk(self): """Remove anything left on disk""" if os.path.exists(repos_location): svn_repos_delete(repos_location, Pool()) def svn_dirent_t_assert_equal(self, a, b): """Assert that two svn_dirent_t's are equal, ignoring their 'time' fields.""" self.assertEqual(a.kind, b.kind) self.assertEqual(a.size, b.size) self.assertEqual(a.has_props, b.has_props) self.assertEqual(a.created_rev, b.created_rev) self.assertEqual(a.last_author, b.last_author) def test_remote_latest_revnum(self): self.assertEqual(9, self.repos.latest_revnum()) def test_remote_check_path(self): self.assertEqual(svn_node_file, self.repos.check_path("trunk/README.txt")) self.assertEqual(svn_node_dir, self.repos.check_path("trunk/dir", 6)) self.assertEqual(svn_node_none, self.repos.check_path("trunk/dir", 7)) self.assertEqual(svn_node_none, self.repos.check_path("does_not_compute")) def test_list(self): expected = { 'README.txt': svn_dirent_t(kind=svn_node_file, size=159, has_props=True, created_rev=9, last_author=String('bruce')), 'ANOTHERREADME.txt': svn_dirent_t(kind=svn_node_file, size=66, has_props=False, created_rev=4, last_author=String('clark')) } found = self.repos.list("trunk") self.assertEqual(sorted(found.keys()), sorted(expected.keys())) for path in found: self.svn_dirent_t_assert_equal(found[path], expected[path]) def test_info(self): e = svn_dirent_t(kind=svn_node_file, size=159, has_props=True, created_rev=9, last_author=String('bruce')) f = self.repos.info("trunk/README.txt") self.svn_dirent_t_assert_equal(f, e) def test_proplist(self): expected = { 'Awesome': 'Yes', 'svn:entry:last-author': 'bruce', 'svn:entry:committed-rev': '9' } found = self.repos.proplist("trunk/README.txt") # Check results, ignoring some entry-props del found['svn:entry:committed-date'] del found['svn:entry:uuid'] self.assertEqual(sorted(found.keys()), sorted(expected.keys())) for pname in found: self.assertEqual(found[pname], expected[pname]) def test_propget(self): found = self.repos.propget("Awesome", "trunk/README.txt") self.assertEqual(found, "Yes") def test_log(self): expected = [(8, 'clark'), (9, 'bruce')] for found in self.repos.log(7, 9, ["trunk/README.txt"]): (e_rev, e_author) = expected[0] self.assertEqual(found.revision, e_rev) self.assertEqual(found.author, e_author) expected = expected[1:] def test_revprop_list(self): # Test argument-free case props = self.repos.revprop_list() self.assertEqual(props["svn:log"], "Restore information deleted in rev 8\n") self.assertEqual(props["svn:author"], "bruce") self.assertEqual(props["svn:date"], "2007-08-02T18:24:16.960652Z") # Test with revnum argument props = self.repos.revprop_list(4) self.assertEqual( props["svn:log"], "Add important new file. This marks the 1.0 release.\n\n") self.assertEqual(props["svn:author"], "clark") self.assertEqual(props["svn:date"], "2007-08-02T17:38:08.361367Z") def test_revprop_get(self): # Test without revnum self.assertEqual(self.repos.revprop_get("svn:log"), "Restore information deleted in rev 8\n") # With revnum self.assertEqual(self.repos.revprop_get("svn:date", 4), "2007-08-02T17:38:08.361367Z") def test_revprop_set(self): # For revprops to be changeable, we need to have a hook. # We'll make a hook that accepts anything if sys.platform == "win32": hook = os.path.join(repos_location, "hooks", "pre-revprop-change.bat") f = open(hook, "w") f.write("@exit") f.close() else: hook = os.path.join(repos_location, "hooks", "pre-revprop-change") f = open(hook, "w") f.write("#!/bin/sh\nexit 0;") f.close() os.chmod(hook, S_IRWXU) if sys.platform == "cygwin": ### FIXME: When you try to set revprops, cygwin crashes ### with a fatal error, so we skip this test for now. return revnum = self.repos.revprop_set("svn:log", "Changed log") self.assertEqual(revnum, 9) self.assertEqual(self.repos.revprop_get("svn:log"), "Changed log") # Test with revnum argument also revnum = self.repos.revprop_set("svn:log", "Another changed log", 4) self.assertEqual(revnum, 4) self.assertEqual(self.repos.revprop_get("svn:log", 4), "Another changed log") @staticmethod def _log_func(commits): return [u"test revision", None] def test_svnimport(self): newfile = os.path.join(tempfile.gettempdir(), "newfile.txt") f = open(newfile, "w") f.write("Some new stuff\n") f.close() commit_info = self.repos.svnimport(newfile, "%s/newfile.txt" % repos_url, log_func=self._log_func) self.assertEqual(commit_info.revision, 10)
class RemoteRepositoryTestCase(unittest.TestCase): def setUp(self): dumpfile = open( os.path.join(os.path.split(__file__)[0], 'test.dumpfile')) # Just in case a previous test instance was not properly cleaned up self.remove_from_disk() self.repos = LocalRepository(repos_location, create=True) self.repos.load(dumpfile) self.repos = RemoteRepository(repos_url) def tearDown(self): self.repos.close() self.remove_from_disk() self.repos = None def remove_from_disk(self): """Remove anything left on disk""" if os.path.exists(repos_location): svn_repos_delete(repos_location, Pool()) def test_remote_latest_revnum(self): self.assertEqual(9, self.repos.latest_revnum()) def test_remote_check_path(self): self.assertEqual(svn_node_file, self.repos.check_path("trunk/README.txt")) self.assertEqual(svn_node_dir, self.repos.check_path("trunk/dir", 6)) self.assertEqual(svn_node_none, self.repos.check_path("trunk/dir", 7)) self.assertEqual(svn_node_none, self.repos.check_path("does_not_compute")) def test_revprop_list(self): # Test argument-free case props = self.repos.revprop_list() self.assertEqual(props["svn:log"], "Restore information deleted in rev 8\n") self.assertEqual(props["svn:author"], "bruce") self.assertEqual(props["svn:date"], "2007-08-02T18:24:16.960652Z") # Test with revnum argument props = self.repos.revprop_list(4) self.assertEqual( props["svn:log"], "Add important new file. This marks the 1.0 release.\n\n") self.assertEqual(props["svn:author"], "clark") self.assertEqual(props["svn:date"], "2007-08-02T17:38:08.361367Z") def test_revprop_get(self): # Test without revnum self.assertEqual(self.repos.revprop_get("svn:log"), "Restore information deleted in rev 8\n") # With revnum self.assertEqual(self.repos.revprop_get("svn:date", 4), "2007-08-02T17:38:08.361367Z") def test_revprop_set(self): # For revprops to be changeable, we need to have a hook. # We'll make a hook that accepts anything if sys.platform == "win32": hook = os.path.join(repos_location, "hooks", "pre-revprop-change.bat") f = open(hook, "w") f.write("@exit") f.close() else: hook = os.path.join(repos_location, "hooks", "pre-revprop-change") f = open(hook, "w") f.write("#!/bin/sh\nexit 0;") f.close() os.chmod(hook, S_IRWXU) if sys.platform == "cygwin": ### FIXME: When you try to set revprops, cygwin crashes ### with a fatal error, so we skip this test for now. return revnum = self.repos.revprop_set("svn:log", "Changed log") self.assertEqual(revnum, 9) self.assertEqual(self.repos.revprop_get("svn:log"), "Changed log") # Test with revnum argument also revnum = self.repos.revprop_set("svn:log", "Another changed log", 4) self.assertEqual(revnum, 4) self.assertEqual(self.repos.revprop_get("svn:log", 4), "Another changed log") @staticmethod def _log_func(commits): return [u"test revision", None] def test_svnimport(self): newfile = os.path.join(tempfile.gettempdir(), "newfile.txt") f = open(newfile, "w") f.write("Some new stuff\n") f.close() commit_info = self.repos.svnimport(newfile, "%s/newfile.txt" % repos_url, log_func=self._log_func) self.assertEqual(commit_info.revision, 10)
class RemoteRepositoryTestCase(unittest.TestCase): def setUp(self): dumpfile = open(os.path.join(os.path.split(__file__)[0], 'test.dumpfile')) # Just in case a previous test instance was not properly cleaned up self.remove_from_disk() self.repos = LocalRepository(repos_location, create=True) self.repos.load(dumpfile) self.repos = RemoteRepository(repos_url) def tearDown(self): self.repos.close() self.remove_from_disk() self.repos = None def remove_from_disk(self): """Remove anything left on disk""" if os.path.exists(repos_location): svn_repos_delete(repos_location, Pool()) def test_remote_latest_revnum(self): self.assertEqual(9, self.repos.latest_revnum()) def test_remote_check_path(self): self.assertEqual(svn_node_file, self.repos.check_path("trunk/README.txt")) self.assertEqual(svn_node_dir, self.repos.check_path("trunk/dir", 6)) self.assertEqual(svn_node_none, self.repos.check_path("trunk/dir", 7)) self.assertEqual(svn_node_none, self.repos.check_path("does_not_compute")) def test_revprop_list(self): # Test argument-free case props = self.repos.revprop_list() self.assertEqual(props["svn:log"], "Restore information deleted in rev 8\n") self.assertEqual(props["svn:author"], "bruce") self.assertEqual(props["svn:date"], "2007-08-02T18:24:16.960652Z") # Test with revnum argument props = self.repos.revprop_list(4) self.assertEqual(props["svn:log"], "Add important new file. This marks the 1.0 release.\n\n") self.assertEqual(props["svn:author"], "clark") self.assertEqual(props["svn:date"], "2007-08-02T17:38:08.361367Z") def test_revprop_get(self): # Test without revnum self.assertEqual(self.repos.revprop_get("svn:log"), "Restore information deleted in rev 8\n") # With revnum self.assertEqual(self.repos.revprop_get("svn:date", 4), "2007-08-02T17:38:08.361367Z") def test_revprop_set(self): # For revprops to be changeable, we need to have a hook. # We'll make a hook that accepts anything if sys.platform == "win32": hook = os.path.join(repos_location, "hooks", "pre-revprop-change.bat") f = open(hook, "w") f.write("@exit") f.close() else: hook = os.path.join(repos_location, "hooks", "pre-revprop-change") f = open(hook, "w") f.write("#!/bin/sh\nexit 0;") f.close() os.chmod(hook, S_IRWXU) if sys.platform == "cygwin": ### FIXME: When you try to set revprops, cygwin crashes ### with a fatal error, so we skip this test for now. return revnum = self.repos.revprop_set("svn:log", "Changed log") self.assertEqual(revnum, 9) self.assertEqual(self.repos.revprop_get("svn:log"), "Changed log") # Test with revnum argument also revnum = self.repos.revprop_set("svn:log", "Another changed log", 4) self.assertEqual(revnum, 4) self.assertEqual(self.repos.revprop_get("svn:log", 4), "Another changed log") @staticmethod def _log_func(commits): return [u"test revision", None] def test_svnimport(self): newfile = os.path.join(tempfile.gettempdir(), "newfile.txt") f = open(newfile, "w") f.write("Some new stuff\n") f.close() commit_info = self.repos.svnimport(newfile, "%s/newfile.txt" % repos_url, log_func=self._log_func) self.assertEqual(commit_info.revision, 10)
class RemoteRepositoryTestCase(unittest.TestCase): def setUp(self): dumpfile = open(os.path.join(os.path.split(__file__)[0], 'test.dumpfile')) # Just in case a previous test instance was not properly cleaned up self.remove_from_disk() self.repos = LocalRepository(repos_location, create=True) self.repos.load(dumpfile) self.repos = RemoteRepository(repos_url) def tearDown(self): self.repos.close() self.remove_from_disk() self.repos = None def remove_from_disk(self): """Remove anything left on disk""" if os.path.exists(repos_location): svn_repos_delete(repos_location, Pool()) def svn_dirent_t_assert_equal(self, a, b): """Assert that two svn_dirent_t's are equal, ignoring their 'time' fields.""" self.assertEqual(a.kind, b.kind) self.assertEqual(a.size, b.size) self.assertEqual(a.has_props, b.has_props) self.assertEqual(a.created_rev, b.created_rev) self.assertEqual(a.last_author, b.last_author) def test_remote_latest_revnum(self): self.assertEqual(9, self.repos.latest_revnum()) def test_remote_check_path(self): self.assertEqual(svn_node_file, self.repos.check_path("trunk/README.txt")) self.assertEqual(svn_node_dir, self.repos.check_path("trunk/dir", 6)) self.assertEqual(svn_node_none, self.repos.check_path("trunk/dir", 7)) self.assertEqual(svn_node_none, self.repos.check_path("does_not_compute")) def test_list(self): expected = { 'README.txt': svn_dirent_t(kind=svn_node_file, size=159, has_props=True, created_rev=9, last_author=String('bruce')), 'ANOTHERREADME.txt': svn_dirent_t(kind=svn_node_file, size=66, has_props=False, created_rev=4, last_author=String('clark')) } found = self.repos.list("trunk") self.assertEqual(sorted(found.keys()), sorted(expected.keys())) for path in found: self.svn_dirent_t_assert_equal(found[path], expected[path]) def test_info(self): e = svn_dirent_t(kind=svn_node_file, size=159, has_props=True, created_rev=9, last_author=String('bruce')) f = self.repos.info("trunk/README.txt") self.svn_dirent_t_assert_equal(f, e) def test_proplist(self): expected = { 'Awesome': 'Yes', 'svn:entry:last-author': 'bruce', 'svn:entry:committed-rev': '9' } found = self.repos.proplist("trunk/README.txt") # Check results, ignoring some entry-props del found['svn:entry:committed-date'] del found['svn:entry:uuid'] self.assertEqual(sorted(found.keys()), sorted(expected.keys())) for pname in found: self.assertEqual(found[pname], expected[pname]) def test_propget(self): found = self.repos.propget("Awesome", "trunk/README.txt") self.assertEqual(found, "Yes") def test_log(self): expected = [ (8, 'clark'), (9, 'bruce') ] for found in self.repos.log(7, 9, ["trunk/README.txt"]): (e_rev, e_author) = expected[0] self.assertEqual(found.revision, e_rev) self.assertEqual(found.author, e_author) expected = expected[1:] def test_revprop_list(self): # Test argument-free case props = self.repos.revprop_list() self.assertEqual(props["svn:log"], "Restore information deleted in rev 8\n") self.assertEqual(props["svn:author"], "bruce") self.assertEqual(props["svn:date"], "2007-08-02T18:24:16.960652Z") # Test with revnum argument props = self.repos.revprop_list(4) self.assertEqual(props["svn:log"], "Add important new file. This marks the 1.0 release.\n\n") self.assertEqual(props["svn:author"], "clark") self.assertEqual(props["svn:date"], "2007-08-02T17:38:08.361367Z") def test_revprop_get(self): # Test without revnum self.assertEqual(self.repos.revprop_get("svn:log"), "Restore information deleted in rev 8\n") # With revnum self.assertEqual(self.repos.revprop_get("svn:date", 4), "2007-08-02T17:38:08.361367Z") def test_revprop_set(self): # For revprops to be changeable, we need to have a hook. # We'll make a hook that accepts anything if sys.platform == "win32": hook = os.path.join(repos_location, "hooks", "pre-revprop-change.bat") f = open(hook, "w") f.write("@exit") f.close() else: hook = os.path.join(repos_location, "hooks", "pre-revprop-change") f = open(hook, "w") f.write("#!/bin/sh\nexit 0;") f.close() os.chmod(hook, S_IRWXU) if sys.platform == "cygwin": ### FIXME: When you try to set revprops, cygwin crashes ### with a fatal error, so we skip this test for now. return revnum = self.repos.revprop_set("svn:log", "Changed log") self.assertEqual(revnum, 9) self.assertEqual(self.repos.revprop_get("svn:log"), "Changed log") # Test with revnum argument also revnum = self.repos.revprop_set("svn:log", "Another changed log", 4) self.assertEqual(revnum, 4) self.assertEqual(self.repos.revprop_get("svn:log", 4), "Another changed log") @staticmethod def _log_func(commits): return [u"test revision", None] def test_svnimport(self): newfile = os.path.join(tempfile.gettempdir(), "newfile.txt") f = open(newfile, "w") f.write("Some new stuff\n") f.close() commit_info = self.repos.svnimport(newfile, "%s/newfile.txt" % repos_url, log_func=self._log_func) self.assertEqual(commit_info.revision, 10)