Welcome, guest | Sign In | My Account | Store | Cart

I had mistakenly checked in .pyc files into svn, So I took this approach of deleting all the .pyc files in the current working copy directory tree and then using svn remove to the remove from the repository. The following is the snippet I wrote then to for the purpose.

Python, 31 lines
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Remove .pyc files from svn from the current directory tree.

import os
import subprocess

# Delete the files first.

for dirpath, dirnames, filenames in os.walk(os.getcwd()):
    for each_file in filenames:
        if each_file.endswith('.pyc'):
            if os.path.exists(os.path.join(dirpath, each_file)):
                os.remove(os.path.join(dirpath, each_file))

# Now, get the svn status and remove the deleted files.

cout, cerr  = subprocess.Popen('svn status .', shell=True,
                                   stdin=subprocess.PIPE,
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE).communicate()
files = cout.split('\n')
output = []

for fname in files:
    if fname.startswith('!'):
        output.append(fname.strip('!').strip())

for each in output:
    try:
        os.system('svn remove ' + each)
    except Exception, e:
        print e

4 comments

Christophe Simonis 12 years, 11 months ago  # | flag

Why not just run this command ?

$ find . -name "*.pyc" | xargs svn rm --force
Garel Alex 12 years, 11 months ago  # | flag

edit ~/.subversion/config, uncomment global-ignores line and add *.pyc :-)

Rodney Drenth 12 years, 11 months ago  # | flag

I'm one who would find this program useful. First, I'm on Windows so there's no 'find' command. Secondly, when I've got several projects I'm working on and I want svn to ignore different extensions for different projects, I can't do it by editing .subversion/config, which tells it to ignore extensions globally. Subversion is not as configurable as it needs to be. You should be able to tell svn on a project by project basis which file extensions to ignore AND have this apply to ALL people who do updates/commits on the project.

Michael Cummings 11 years, 12 months ago  # | flag

Might look at svn:ignore property it allows you to do want you want on a per project basis.