/
cleanup-elpa
executable file
·61 lines (49 loc) · 1.47 KB
/
cleanup-elpa
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env python
from collections import defaultdict
import os
from os.path import join as dirjoin, isdir
import shutil
import git # >= 0.3
repo = git.Repo(os.path.realpath(__file__))
packages = defaultdict(list)
for name in os.listdir('elpa'):
if isdir(dirjoin('elpa', name)) and '-' in name:
package, version = name.rsplit('-', 1)
packages[package].append((version, name))
untracked_packages = {'/'.join(fn.split('/')[:2])
for fn in repo.untracked_files}
to_git_rm = []
to_rm = []
to_add = []
for packages, versions in packages.items():
if len(versions) > 1:
versions.sort()
for version, name in versions[:-1]:
fname = dirjoin('elpa', name)
if fname not in untracked_packages:
to_git_rm.append(fname)
else:
to_rm.append(fname)
#print "old: " + fname
to_add.append(dirjoin('elpa', versions[-1][1]))
#print "new: " + fname
did_something = False
def del_list(lst):
for dname in lst:
shutil.rmtree(dname)
if to_rm:
did_something = True
print "rm " + ' '.join(lst)
del_list(to_rm)
if to_git_rm:
did_something = True
print "git rm -r " + ' '.join(to_git_rm)
for dname in to_git_rm:
shutil.rmtree(dname)
repo.git.rm(*to_git_rm, r=True)
if to_add:
did_something = True
print 'git add ' + ' '.join(to_add)
repo.git.add(*to_add)
if not did_something:
print 'nothing to do'