Ejemplo n.º 1
0
    def setUp(self):
        dumpfile = open(
            os.path.join(os.path.split(__file__)[0], 'test.dumpfile'))

        # Just in case a preivous test instance was not properly cleaned up
        self.tearDown()
        self.repos = LocalRepository(repos_location, create=True)
        self.repos.load(dumpfile)

        self.repos = RemoteRepository(repos_url)
Ejemplo n.º 2
0
    def setUp(self):
        dumpfile = open(os.path.join(os.path.split(__file__)[0],
                        'test.dumpfile'))

        # Just in case a preivous test instance was not properly cleaned up
        self.tearDown()
        self.repos = LocalRepository(repos_location, create=True)
        self.repos.load(dumpfile)

        self.repos = RemoteRepository(repos_url)
Ejemplo n.º 3
0
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)
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)
Ejemplo n.º 5
0
if len(args) != 1:
    parser.print_help()
    sys.exit(1)

repos_url = args[0]

# Initialize variables
new_dir_name = "trunk"
if options.directory:
    new_dir_name = options.directory

if options.message:
    commit_message = options.message
elif options.file:
    commit_message = open(options.file).read()
else:
    commit_message = "Move project into new directory '%s'." % new_dir_name

svn_cmdline_init("", stderr)
s = RemoteRepository(repos_url, user=User(username=options.username))

txn = s.txn()

for name in s.list("").keys():
    txn.delete(name)

txn.copy(src_path="", dest_path=new_dir_name)

txn.commit(commit_message)
Ejemplo n.º 6
0
            # It's legal to make a copy of the repository root,
            # so, we should treat copyfrom paths as possible
            # repository roots
            may_be_root = (len(action) == 2 and action[0] == "cp")

            if not may_be_root:
                arg = arg.dirname()

            if ancestor:
                ancestor = ancestor.longest_ancestor(arg)
            else:
                ancestor = arg
        else:
            action.append(arg)

session = RemoteRepository(ancestor, user=User(username=options.username))
txn = session.txn()

# Carry out the transaction
for action, args in actions:
    if action == "cp":
        txn.copy(src_rev=args[1], src_path=args[2], dest_path=args[3])
    elif action == "mv":
        txn.delete(str(args[1]))
        txn.copy(src_path=args[1], dest_path=args[2])
    elif action == "rm":
        txn.delete(args[1])
    elif action == "mkdir":
        txn.mkdir(args[1])
    elif action == "put":
        txn.upload(local_path=args[1], remote_path=args[2])
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
            # It's legal to make a copy of the repository root,
            # so, we should treat copyfrom paths as possible
            # repository roots
            may_be_root = (len(action) == 2 and action[0] == "cp")

            if not may_be_root:
                arg = arg.dirname()

            if ancestor:
                ancestor = ancestor.longest_ancestor(arg)
            else:
                ancestor = arg
        else:
            action.append(arg)

session = RemoteRepository(ancestor, user=User(username=options.username))
txn = session.txn()

# Carry out the transaction
for action, args in actions:
    if action == "cp":
        txn.copy(src_rev=args[1], src_path=args[2], dest_path=args[3])
    elif action == "mv":
        txn.delete(str(args[1]))
        txn.copy(src_path=args[1], dest_path=args[2])
    elif action == "rm":
        txn.delete(args[1])
    elif action == "mkdir":
        txn.mkdir(args[1])
    elif action == "put":
        txn.upload(local_path=args[1], remote_path=args[2])
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
if len(args) != 1:
    parser.print_help()
    sys.exit(1)

repos_url = args[0]

# Initialize variables
new_dir_name = "trunk"
if options.directory:
    new_dir_name = options.directory

if options.message:
    commit_message = options.message
elif options.file:
    commit_message = file(options.file).read()
else:
    commit_message = "Move project into new directory '%s'." % new_dir_name

svn_cmdline_init("", stderr)
s = RemoteRepository(repos_url, user=User(username=options.username))

txn = s.txn()

for name in s.list("").keys():
    txn.delete(name)

txn.copy(src_path="", dest_path=new_dir_name)

txn.commit(commit_message)
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)