{ "info": { "author": "Ethan Jucovy & Jeff Hammel", "author_email": "ejucovy@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "It can be used with SVN or BZR backends.\n\nThe SVN backend requires `pysvn` which you will probably want to install system-wide[1].\n\nThe BZR backend requires `bzrlib`. Currently only bzr 2.0+ is supported.\n\nBasic usage::\n\n from sven.backend import SvnAccess\n client = SvnAccess(my_local_checkout_dir)\n \n client.write('path/to/a/file/to/write', \"Lovely content to be versioning!\")\n client.write('path/to/another/file', \"Aw shucks, I'll version this too..\",\n msg=\"My commit message\", mimetype='text/plain')\n\n last_rev_int = client.last_changed_rev('path/to/another/file')\n\n last_rev_int = last_rev_int - 1\n from sven.exc import ResourceUnchanged\n try:\n earlier_version = client.read('path/to/another/file', rev=last_rev_int)\n except ResourceUnchanged, exc:\n \tlast_rev_int = exc.last_change\n earlier_version = client.read('path/to/another/file', rev=last_rev_int)\n\t\n changelog = client.log('path/to/another/file', rev=last_rev_int)\n\nTo use the BZR backend,\n\n from sven.bzr import BzrAccess\n\nThe interface is the same.\n\nEach `.write` writes the content to the path on the local filesystem's checkout\nand then commits it to the repository. The workflow of one-write-per-commit is\nby design and is not likely to change soon; if you need a different workflow,\nyou probably ought to just be using svn clients directly, anyway.\n\nCurrently sven does not help you set up a repository client or server. It \nassumes you've already got a repository and checkout (which may be the same\nthing, in the BZR case) set up.\n\nThe formats returned by some of its methods (.read, .log and .ls) are\ntotally ad-hoc right now and strange; they'll probably be formalized sooner\nor later.\n\nFor more detailed usage documentation please see ./sven/doctest.txt (which\ncan be run as a test suite by `python sven/backend.py`) and ./sven/bzr.txt\n(which can be run as a test suite by `python sven/bzr.py`)\n\n[1] If you start to experience Segmentation faults while using sven, especially\n during .write operations, your versions of ``svn`` and ``pysvn`` are likely\n incompatible (e.g. svn 1.5 with pysvn compiled against your earlier svn 1.4)\n If this happens, you should uninstall pysvn, then compile it from source.\n You might want to test for this upfront by running the test suite:\n\n python sven/backend.py\n\nFollow sven on github: \n\n\nNew in this version\n-------------------\n\n * Added sven.exc.MissingRepository exception, to be thrown when accessing a nonexistent repo.\n\n * Added kwarg `check_repo` to BzrAccess.__init__ with default `False`. If set to True,\n the constructor will check for the existence of a repository and throw a MissingRepository\n if it does not exist.\n\n * Add `author` kwarg to BzrAccess.write with default `None`. It can be set to a string value\n which will be used as the \"author\" of the commit. (The system-level `bzr whoami` output \n will still be used for the separate \"contributor\" of the commit.) This is equivalent to the\n command-line `bzr commit --author`.\n\n * Add `timestamp` kwarg to BzrAccess.write with default `None`. It can be set to a numerical\n timestamp, which will override the current system time in the commit. This is equivalent to\n the command-line `bzr commit --timestamp`.\n\n * Manually strip all \"\\r\" characters from the commit message; bzr seems to break if any are \n present.\n\n\nHistory\n-------\n\n0.8.1 (2010-11-10)\n==================\n\n * Make version numbers sane for bzr backend (one commit per write,\n regardless of how many intermediate directories were created)\n\n0.8 (2010-08-26)\n================\n\n * Don't require python svn libs installed when importing sven\n\n * Tweaks for Python 2.4 compatibility\n\n * Add support for writing revprops\n\n0.7.2 (2010-01-26)\n==================\n\n * Fix bug in SVN backend's 'mimetype' getter.\n\n0.7.1 (2010-01-26)\n==================\n\n * Update SVN backend to talk about 'mimetype' instead of 'kind'.\n\n0.7 (2010-01-26)\n================\n\n * Added bazaar backend and tests.\n\n * Removed experimental mercurial backend. I only need \"something\n faster than subversion\" and Bazaar's worldview fits my brain\n better, so I doubt I'll be maintaining the mercurial backend.\n If you're using it, please complain loudly, because I didn't\n know that you were using it.\n\n * client.kind(uri) now takes an optional integer `rev` parameter\n like everything else.\n\n * The strange dictionary returned by .read() now uses keys named\n 'body' and 'mimetype' instead of 'body' and 'kind'.\n\n * Refactored path normalization in SVN backend classes and added\n optional `path_fixer` callable argument to constructor.\n\n If provided, `path_fixer` should expect to be called with a\n string URI as the only argument. It should return a string URI.\n It can be used to define filesystem layout policies, like\n \"always store files prefixed under a date hierarchy\" or \"add a\n file extension.\"\n\n I'm probably overabstracting too early, though, so I won't be\n surprised if I scrap this idea.\n\n * When writing contents to a file, Sven used to append a newline\n to the contents whether or not the contents already ended with\n a newline. Now, sven will only append a newline if the content\n doesn't already end in a newline.\n\n * Implemented custom resource properties for bazaar backend,\n because it doesn't have any concept like `svn propget/propset`.\n\n Resource properties are implemented as independently versioned\n files. File and directory properties live in separate locations,\n because that seemed easier and more logical somehow.\n\n For a file '/foo/bar/baz.txt' its 'mimetype' property lives at\n '/.sven-meta/.mimetype/foo/bar/baz.txt' and its 'fleem' property\n lives at '/.sven-meta/.fleem/foo/bar/baz.txt'.\n\n For a directory '/foo/bar/' its 'mimetype' property lives at\n '/foo/bar/.sven-meta/.mimetype' and its 'fleem' property lives\n at '/foo/bar/.sven-meta/.fleem'.\n\n Note that for normal files read and written directly by the user,\n sven's default behavior appends a newline to the end of the file\n if there is none. For these metadata files, sven does not append\n a newline to the end of the file.\n\n0.6 (2009-11-24)\n================\n\n * SvnBackend.__init__ no longer takes a 'svnuri' argument to the\n remote repository as its first positional argument; it's not\n used anywhere. This is a backwards-incompatible change.\n\n * The strange ad-hoc JSONish object returned by SvnAccess.ls had an\n extra `/` prefixed to the object's 'href' erroneously; now fixed.\n\n * Experimental implementation of the Sven API for Mercurial backends \n now lives in sven.hg.HgAccess; it is documented in hg-doctest.txt\n and has a few small differences from the SvnAccess backend. It is\n highly incomplete (think of it as an alpha stage) and requires\n `mercurial` to be installed. Sven does not install mercurial, just\n like it doesn't install pysvn.\n\n0.5\n===\n\nThe 0.5 release does not exist. Sven went straight to 0.6 after 0.4.1\nwith some backwards-incompatible changes.\n\n0.4.1 (2009-08-10)\n==================\n\n * Fixed several embarrassing typos in the 0.4 release\n\n0.4 (2009-08-10)\n================\n\n * Added simple_backend.FSAccess class, which partially implements\n the SVNAccess API, but on a plain old filesystem. Needs tests\n and documentation, among other things (e.g. justification)\n\n * Refactored SvnAccess to split out recently-added options for\n update_before/after_write into logically separate component\n\n * SvnAccess.set_kind and .write now return the pysvn.Revision of\n the (last) commit instead of None\n\n * Added SvnAccessEventEmitter class which executes a list of callback\n functions at the end of every successful .write and .set_kind action\n\n Callbacks should have the signature \n (uri, contents, msg, kind, (pre_rev, post_rev))\n\n\n0.3.1 (2009-07-28)\n==================\n\n * Fixed bug: SvnAccess.ls was returning its contents with absolute URIs, \n rather than URIs relative to the root of the repository.\n\n\n0.3 (2009-07-25)\n================\n\n * Removed `SvnAccess.update_after_write` knob and instead set default value of True\n to the `update_after_write` argument to `SvnAccess.write`; callers can implement\n alternatives trivially by subclassing.\n\n * Added `update_before_write` argument to .write with default value of True. Turn\n this off as well as `update_after_write` if you want to manage synchronicity in\n exchange for potentially significant performance improvements.\n\n * Added `default_commit_message` argument to `SvnAccess` constructor. The default\n is \"foom\".\n\n * Throw `exc.ResourceChanged` exceptions when a file is found to be out of date\n during a write operation (which will only happen if `update_before_write` is\n unset by the caller) and revert local changes if this happens, to restore the\n checkout to an unconflicting state.\n\n\n0.2 (2009-07-25)\n================\n\n * Now with doctests!\n\n * `SvnAccess.write` now supports an optional `update_after_write` argument.\n If set to a True value, calls to .write will end with an `svn up` to\n resynchronize the checkout with the repository. Default is False.\n\n * `SvnAccess.__init__` now supports an optional `update_after_write` argument.\n If set to a True value, all calls to .write will end with an `svn up`\n even if .write is not sent a True `update_after_write` value. Default\n is True, so if you are concerned with performance and willing to maintain\n synchronicity on your own, you should explicitly set this to False.\n\n * `SvnAccess.__init__` no longer executes a silent `os.chdir`.\n\n\n0.1.2 (2009-07-24)\n==================\n\nFirst release.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": "", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "sven", "package_url": "https://pypi.org/project/sven/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/sven/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/sven/0.9/", "requires_dist": null, "requires_python": null, "summary": "sven is a document-oriented programming library that helps you put content in a version-controlled document repository", "version": "0.9" }, "last_serial": 800271, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "931941fcb6f274edcced37655b0ad26f", "sha256": "7dd1257eaed7dbff115bbc19cf59ada881a22f7d2d4012cadaac0238db44e3b0" }, "downloads": -1, "filename": "sven-0.1.tar.gz", "has_sig": false, "md5_digest": "931941fcb6f274edcced37655b0ad26f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3211, "upload_time": "2009-07-24T18:34:48", "url": "https://files.pythonhosted.org/packages/2f/f5/21e4670fd50b12fcc7814319539bd9cedc410a54d35afb743d91a4c3fbd6/sven-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "b165488591d1fb0cc9bd9cdeeefc637a", "sha256": "986f33f7a07b9ff0092d1e36d5cc35fbbe0ef6f197a73e3ec6ee6bec34fb712a" }, "downloads": -1, "filename": "sven-0.1.1.tar.gz", "has_sig": false, "md5_digest": "b165488591d1fb0cc9bd9cdeeefc637a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3237, "upload_time": "2009-07-24T19:05:39", "url": "https://files.pythonhosted.org/packages/93/5f/0a81c29be479296a8625e324662da85f3d4c72d51a9cd0ca84b95aef1e7c/sven-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "9581ef723fc1b5d40c1f0ac0578d1747", "sha256": "d36f97c5c65465d4962676d1b838be6052b2a75a51bfe43c11db5ae23c1bd4d0" }, "downloads": -1, "filename": "sven-0.1.2.tar.gz", "has_sig": false, "md5_digest": "9581ef723fc1b5d40c1f0ac0578d1747", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4346, "upload_time": "2009-07-24T20:26:13", "url": "https://files.pythonhosted.org/packages/68/3f/e800631082f17ffbe45ff94bbf69c26d02754d42df0704436312ad83df3b/sven-0.1.2.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "cbc035c1dfde25ac13d95a240fc8262a", "sha256": "eb4d5e33bb7732a4bbdc0d07b5cde4da49b94ceb8536336cf4652e026930b783" }, "downloads": -1, "filename": "sven-0.2.tar.gz", "has_sig": false, "md5_digest": "cbc035c1dfde25ac13d95a240fc8262a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6122, "upload_time": "2009-07-26T02:33:38", "url": "https://files.pythonhosted.org/packages/3e/3b/99cd1f770d01de8945f7d1e5b62289f51bfc48f3a5071a48fb1cddd54f07/sven-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "8d9049629082354b3b909f0fd138232a", "sha256": "d92d09c541fbf4811f4196e6edcb9d3b418fc2570a89d316c3416ef5a6685c42" }, "downloads": -1, "filename": "sven-0.3.tar.gz", "has_sig": false, "md5_digest": "8d9049629082354b3b909f0fd138232a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7380, "upload_time": "2009-07-26T07:29:50", "url": "https://files.pythonhosted.org/packages/ed/0e/a554d4766351b46bfdfad4a28b962513132b7736754be42c4aa7b6b3a354/sven-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "2a5423f137f0fbba5f2235d101c2d92f", "sha256": "950a78b9392da8f7ed75876205dabf57dc33ea8e10832feeb8a12a6ec7594d73" }, "downloads": -1, "filename": "sven-0.3.1.tar.gz", "has_sig": false, "md5_digest": "2a5423f137f0fbba5f2235d101c2d92f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7421, "upload_time": "2009-07-28T18:21:18", "url": "https://files.pythonhosted.org/packages/b6/de/a75526ee56900e54548c3aa1bcee543a6153c82849d7be13d9d5788386a6/sven-0.3.1.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "eba89be8f95d1e12e5d8468c2ce1ef52", "sha256": "8ba0c755da794790b3566bebf1e5e5727ce0004ea16a4fea13cd17a3ea36f62e" }, "downloads": -1, "filename": "sven-0.4.tar.gz", "has_sig": false, "md5_digest": "eba89be8f95d1e12e5d8468c2ce1ef52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10234, "upload_time": "2009-08-10T19:38:37", "url": "https://files.pythonhosted.org/packages/1d/1e/0e4fb1059b6fb9cf50f2eacb56433f09141e505f0c134dec20ab20488422/sven-0.4.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "15fe7b2e2e8f9b839f6a88b92d6af541", "sha256": "1dca2a52fe21a522fda627e277476d730ce6065211dca7cbe4df0d1634194e7f" }, "downloads": -1, "filename": "sven-0.4.1.tar.gz", "has_sig": false, "md5_digest": "15fe7b2e2e8f9b839f6a88b92d6af541", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10344, "upload_time": "2009-08-10T22:12:31", "url": "https://files.pythonhosted.org/packages/e9/a5/53aca028453b9198080b2e845f54a9189d6203373f583c53f0c908d9890c/sven-0.4.1.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "88050314e31dc9d4e485cf7b873e5900", "sha256": "ac709d392dfa33404f646d52f127fa1dd8c98af77b6c1dd29a437f25f4357b7f" }, "downloads": -1, "filename": "sven-0.6.tar.gz", "has_sig": false, "md5_digest": "88050314e31dc9d4e485cf7b873e5900", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13426, "upload_time": "2009-11-24T15:58:14", "url": "https://files.pythonhosted.org/packages/f2/8f/78738963463d93dcb394ad2d81e03f402d6fb50bac18869612d98666d6c4/sven-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "666615c39eae51d50e027db714dde2d2", "sha256": "7ad719d21d11fce85fb6209783467ec856708a664010ad4a4540821810b61fa9" }, "downloads": -1, "filename": "sven-0.7.tar.gz", "has_sig": false, "md5_digest": "666615c39eae51d50e027db714dde2d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15431, "upload_time": "2010-01-26T20:30:01", "url": "https://files.pythonhosted.org/packages/2d/29/ea069de1f22fc69a1ade1545e37254b60bcf674e0cbdcebdef633c3b1e2a/sven-0.7.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "318b2984d83be01f7b49bbb7f91f2fbc", "sha256": "d07673418f0345885383a4df948d2a8e0d70283b512a6bdc27c47a39604ed37b" }, "downloads": -1, "filename": "sven-0.7.1.tar.gz", "has_sig": false, "md5_digest": "318b2984d83be01f7b49bbb7f91f2fbc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15475, "upload_time": "2010-01-26T20:53:34", "url": "https://files.pythonhosted.org/packages/cb/15/cebda756055af5f84e740afe66cb36e15da797d6718e5288833118126e1e/sven-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "3dc16113cb8313150a612fb98c72a044", "sha256": "78b2aed7c075811df557300a547b678e99def7f685e3288c193f3d1bbb2e9825" }, "downloads": -1, "filename": "sven-0.7.2.tar.gz", "has_sig": false, "md5_digest": "3dc16113cb8313150a612fb98c72a044", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15518, "upload_time": "2010-01-26T22:42:27", "url": "https://files.pythonhosted.org/packages/48/0f/7f8431c816684d05fc7d6ef86a478b149633f193e6d7acbff2c9f5f5e03b/sven-0.7.2.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "317787b56b4eb728d025a8e5e3569990", "sha256": "9f6886421bfc6e7a25ff3e3fc92ece63fd8e2201e4c47f16fc87982e48ea78dd" }, "downloads": -1, "filename": "sven-0.8.tar.gz", "has_sig": false, "md5_digest": "317787b56b4eb728d025a8e5e3569990", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15896, "upload_time": "2010-08-26T18:14:37", "url": "https://files.pythonhosted.org/packages/ad/88/11fa570f4ebfb051268a7ce0dfa9f3653fcb330dc1da6e58320b4a4ea0c4/sven-0.8.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "11a5d612359e7b2f725a4f3104f90552", "sha256": "50e4b2d1c7a0d1376f5308a1122ff66503cc504f19d162a5f75675e1861c9e29" }, "downloads": -1, "filename": "sven-0.8.1.tar.gz", "has_sig": false, "md5_digest": "11a5d612359e7b2f725a4f3104f90552", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15855, "upload_time": "2010-11-10T17:44:29", "url": "https://files.pythonhosted.org/packages/4d/0e/fafcdd405f2f0fbe542271be94dc8b864c5900bd41ffd524114a326a79ce/sven-0.8.1.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "c66cf5b0d3bf9366538de60ae3f4b410", "sha256": "53b295658ef44e3b92a2c8c5bd805a23f7a7780252f481cb0ed100e60a90a78a" }, "downloads": -1, "filename": "sven-0.9.tar.gz", "has_sig": false, "md5_digest": "c66cf5b0d3bf9366538de60ae3f4b410", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11487, "upload_time": "2011-05-16T17:01:59", "url": "https://files.pythonhosted.org/packages/ee/c1/97a6adb4c9f983876f25c79eb6dbc0e1c7d392577eacd3b68cf11064e99e/sven-0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c66cf5b0d3bf9366538de60ae3f4b410", "sha256": "53b295658ef44e3b92a2c8c5bd805a23f7a7780252f481cb0ed100e60a90a78a" }, "downloads": -1, "filename": "sven-0.9.tar.gz", "has_sig": false, "md5_digest": "c66cf5b0d3bf9366538de60ae3f4b410", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11487, "upload_time": "2011-05-16T17:01:59", "url": "https://files.pythonhosted.org/packages/ee/c1/97a6adb4c9f983876f25c79eb6dbc0e1c7d392577eacd3b68cf11064e99e/sven-0.9.tar.gz" } ] }