diff --git a/py/__init__.py b/py/__init__.py index dd0d1d03c..7bbf46eab 100644 --- a/py/__init__.py +++ b/py/__init__.py @@ -26,8 +26,8 @@ version = "1.0.0a1" initpkg(__name__, description = "pylib and py.test: agile development and test support library", - revision = int('$LastChangedRevision: 57754 $'.split(':')[1][:-1]), - lastchangedate = '$LastChangedDate: 2008-09-02 14:24:15 +0200 (Tue, 02 Sep 2008) $', + revision = int('$LastChangedRevision: 58190 $'.split(':')[1][:-1]), + lastchangedate = '$LastChangedDate: 2008-09-17 10:50:04 +0200 (Wed, 17 Sep 2008) $', version = version, url = "http://pylib.org", download_url = "http://codespeak.net/py/0.9.2/download.html", @@ -60,6 +60,7 @@ initpkg(__name__, 'cmdline.pycountloc' : ('./cmdline/pycountloc.py', 'main',), 'cmdline.pycleanup' : ('./cmdline/pycleanup.py', 'main',), 'cmdline.pywhich' : ('./cmdline/pywhich.py', 'main',), + 'cmdline.pysvnwcrevert' : ('./cmdline/pysvnwcrevert.py', 'main',), # helpers for use from test functions or collectors 'test.__doc__' : ('./test/__init__.py', '__doc__'), diff --git a/py/bin/py.svnwcrevert b/py/bin/py.svnwcrevert new file mode 100755 index 000000000..67a1ec7f6 --- /dev/null +++ b/py/bin/py.svnwcrevert @@ -0,0 +1,3 @@ +#!/usr/bin/env python +from _findpy import py +py.cmdline.pysvnwcrevert() \ No newline at end of file diff --git a/py/bin/win32/py.svnwcrevert.cmd b/py/bin/win32/py.svnwcrevert.cmd new file mode 100644 index 000000000..d681b9c0e --- /dev/null +++ b/py/bin/win32/py.svnwcrevert.cmd @@ -0,0 +1,2 @@ +@echo off +python "%~dp0\..\py.svnwcrevert" %* \ No newline at end of file diff --git a/py/cmdline/pysvnwcrevert.py b/py/cmdline/pysvnwcrevert.py new file mode 100755 index 000000000..708f766cd --- /dev/null +++ b/py/cmdline/pysvnwcrevert.py @@ -0,0 +1,49 @@ +#! /usr/bin/env python +"""\ +py.svnwcrevert WCPATH + +Running this script and then 'svn up' puts the working copy WCPATH in a state +as clean as a fresh check-out. + +WARNING: you'll loose all local changes, obviously! + +This script deletes all files that have been modified +or that svn doesn't explicitly know about, including svn:ignored files +(like .pyc files, hint hint). + +The goal of this script is to leave the working copy with some files and +directories possibly missing, but - most importantly - in a state where +the following 'svn up' won't just crash. +""" + +import py + +def kill(p, root): + print '< %s' % (p.relto(root),) + p.remove(rec=1) + +def svnwcrevert(path, root=None): + if root is None: + root = path + wcpath = py.path.svnwc(path) + try: + st = wcpath.status() + except ValueError: # typically, "bad char in wcpath" + kill(path, root) + return + for p in path.listdir(): + if p.basename == '.svn': + continue + wcp = py.path.svnwc(p) + if wcp not in st.unchanged and wcp not in st.external: + kill(p, root) + elif p.check(dir=1): + svnwcrevert(p, root) + + +def main(): + import sys + if len(sys.argv) != 2: + print __doc__ + sys.exit(2) + svnwcrevert(py.path.local(sys.argv[1]))