| #!/usr/bin/env python |
| |
| import csvn.core |
| from csvn.repos import * |
| from csvn.auth import User |
| import os |
| |
| csvn.core.svn_cmdline_init("", csvn.core.stderr) |
| |
| if os.path.exists("/tmp/test-repos"): |
| svn_repos_delete("/tmp/test-repos", Pool()) |
| user = User(username="joecommitter") |
| repos = LocalRepository("/tmp/test-repos", user=user, create=True) |
| print "Repos UUID: ", repos.uuid() |
| |
| # Create a new transaction |
| txn = repos.txn() |
| |
| # You can create a file from a Python string |
| file("/tmp/contents.txt", "w").write("Hello world one!") |
| txn.upload("file1.txt", local_path="/tmp/contents.txt") |
| |
| # ... or from a Python file |
| file("/tmp/contents.txt", "w").write("Hello world two!") |
| txn.upload("file2.txt", local_path="/tmp/contents.txt") |
| |
| # Create some directories |
| txn.mkdir("a") |
| txn.mkdir("a/b") |
| txn.mkdir("a/d") |
| |
| # Commit the transaction |
| new_rev = txn.commit("Create file1.txt and file2.txt. " |
| "Also create some directories") |
| print "Committed revision %d" % new_rev |
| |
| |
| # Transaction number 2 |
| txn = repos.txn() |
| |
| # Copy a to c, but remove one of the subdirectories |
| txn.copy(src_path="a", dest_path="c") |
| txn.delete("c/b") |
| |
| # Copy files around in the repository |
| txn.copy(src_path="file1.txt", dest_path="file3.txt") |
| txn.copy(src_path="file2.txt", dest_path="file4.txt") |
| |
| # Modify some files while we're at it |
| file("/tmp/contents.txt", "w").write("Hello world one and a half!") |
| txn.upload("file1.txt", local_path="/tmp/contents.txt") |
| |
| # Commit our changes |
| new_rev = txn.commit("Create copies of file1.txt, file2.txt, and some " |
| "random directories. Also modify file1.txt.") |
| print "Committed revision %d" % new_rev |
| |
| # Transaction number 3 |
| txn = repos.txn() |
| |
| # Replace file3.txt with the new version of file1.txt |
| txn.delete("file3.txt") |
| txn.copy(src_path="file1.txt", src_rev=2, |
| dest_path="file3.txt") |
| |
| # Commit our changes |
| new_rev = txn.commit("Replace file3.txt with a new copy of file1.txt") |
| print "Committed revision %d" % new_rev |
| |
| session = RemoteRepository("file:///tmp/test-repos", user=user) |
| |
| # Create a new transaction |
| txn = session.txn() |
| |
| if session.check_path("blahdir") != svn_node_none: |
| txn.delete("blahdir") |
| txn.mkdir("blahdir") |
| txn.mkdir("blahdir/dj") |
| txn.mkdir("blahdir/dj/a") |
| txn.mkdir("blahdir/dj/a/b") |
| txn.mkdir("blahdir/dj/a/b/c") |
| txn.mkdir("blahdir/dj/a/b/c/d") |
| txn.mkdir("blahdir/dj/a/b/c/d/e") |
| txn.mkdir("blahdir/dj/a/b/c/d/e/f") |
| txn.mkdir("blahdir/dj/a/b/c/d/e/f/g") |
| txn.upload("blahdir/dj/a/b/c/d/e/f/g/h.txt", "/tmp/contents.txt") |
| |
| rev = txn.commit("create blahdir and descendents") |
| print "Committed revision %d" % rev |
| |
| def ignore(path, kind): |
| basename = os.path.basename(path) |
| _, ext = os.path.splitext(basename) |
| return (basename == ".svn" or basename.endswith("~") or |
| basename.startswith(".") or ext in (".pyc", ".pyo")) |
| |
| def autoprop(txn, path, kind): |
| |
| # Ignore compiled/optimized python files |
| if kind == svn_node_dir: |
| txn.propset(path, "svn:ignore", "*.py[co]") |
| |
| # Set eol-style to native for python files and text files |
| if kind == svn_node_file and (path.endswith(".py") or |
| path.endswith(".txt")): |
| txn.propset(path, "svn:eol-style", "native") |
| |
| txn = session.txn() |
| txn.ignore(ignore) |
| txn.autoprop(autoprop) |
| txn.upload("csvn", local_path="csvn") |
| rev = txn.commit("import csvn dir") |
| print "Committed revision %d" % rev |
| |
| txn = session.txn() |
| txn.copy(src_path="csvn", dest_path="csvn2") |
| txn.upload("csvn2/core/functions.py","/tmp/contents.txt") |
| rev = txn.commit("Copied csvn to csvn2, messing around with functions.py") |
| print "Committed revision %d" % rev |