-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathGitRepo.java
More file actions
105 lines (96 loc) · 2.76 KB
/
Copy pathGitRepo.java
File metadata and controls
105 lines (96 loc) · 2.76 KB
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package javaforce.utils;
import java.io.*;
import java.util.*;
import javaforce.*;
/** Processes a git repo as a package repo.
*
* Uses bfg.jar to delete old packages.
*
* @author pquiring
*/
public class GitRepo {
private static char d1 = '-';
private static char d2 = '-';
public static void main(String[] args) {
if (args.length != 1) {
JFLog.log("Usage: GitRepo package_ext");
System.exit(1);
}
String ext = args[0];
//deb : app - version _ arch . deb
//rpm : app - version - 1.arch .rpm
//pac : app - version - arch .pkg.tar.gz
if (args[0].equals("deb")) {
d2 = '_';
}
//git add *.ext
JF.exec(new String[] {"git", "add", "*." + ext});
String[] files = new File(".").list();
Arrays.sort(files);
String last = null;
for(String file : files) {
if (!file.endsWith(ext)) continue;
if (last == null) {last = file; continue;}
if (same(last, file)) {
if (older(last, file)) {
delete(last);
}
if (older(file, last)) {
delete(file);
}
}
last = file;
}
//files were deleted - update repo
JF.exec(new String[] {"git", "commit" , "-m", getDate()});
//git reflog expire --expire=now --all
JF.exec(new String[] {"git", "reflog", "expire", "--expire=now", "--all"});
//git gc --prune=now --aggressive
JF.exec(new String[] {"git", "gc", "--prune=now", "--aggressive"});
//update.sh
JF.exec(new String[] {"bash", "update.sh"});
}
private static String getDate() {
Calendar c = Calendar.getInstance();
return String.format("\"%04d/%02d/%02d\"",
c.get(Calendar.YEAR),
c.get(Calendar.MONTH) + 1,
c.get(Calendar.DAY_OF_MONTH)
);
}
private static boolean same(String p1, String p2) {
int i1 = p1.indexOf(d1);
if (i1 == -1) return false;
int i2 = p2.indexOf(d1);
if (i2 == -1) return false;
return p1.substring(0, i1).equals(p2.substring(0, i2));
}
private static int[] getVersion(String p) {
int i1 = p.indexOf(d1);
int i2 = p.indexOf(d2);
String[] ps = p.substring(i1 + 1, i2).split("[.]");
int[] ver = new int[ps.length];
for(int a=0;a<ver.length;a++) {
ver[a] = Integer.valueOf(ps[a]);
}
return ver;
}
private static boolean older(String p1, String p2) {
int[] ver1 = getVersion(p1);
int[] ver2 = getVersion(p2);
int len1 = ver1.length;
int len2 = ver2.length;
int len = len1;
if (len2 > len) len = len2;
for(int i=0;i<len;i++) {
if (len1 == i) return true;
if (len2 == i) return false;
if (ver1[i] < ver2[i]) return true;
}
return false;
}
private static void delete(String p) {
new File(p).delete();
JF.exec(new String[] {"java", "-jar", "bfg.jar", "-D", p});
}
}