56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
|
#! /usr/bin/env python
|
||
|
"""\
|
||
|
py.svnwcrevert [options] 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 sys, py
|
||
|
|
||
|
def kill(p, root):
|
||
|
print('< %s' % (p.relto(root),))
|
||
|
p.remove(rec=1)
|
||
|
|
||
|
def svnwcrevert(path, root=None, precious=[]):
|
||
|
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' or p.basename in precious:
|
||
|
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)
|
||
|
|
||
|
# XXX add a functional test
|
||
|
|
||
|
parser = py.std.optparse.OptionParser(usage=__doc__)
|
||
|
parser.add_option("-p", "--precious",
|
||
|
action="append", dest="precious", default=[],
|
||
|
help="preserve files with this name")
|
||
|
|
||
|
def main():
|
||
|
opts, args = parser.parse_args()
|
||
|
if len(args) != 1:
|
||
|
parser.print_help()
|
||
|
sys.exit(2)
|
||
|
svnwcrevert(py.path.local(args[0]), precious=opts.precious)
|