57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
#! /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
 | 
						|
optparse = py.compat.optparse
 | 
						|
 | 
						|
parser = 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)
 |