1
2
3
4
5
6
7
8
9
10
11
12 package org.eclipse.jgit.internal.storage.file;
13
14 import java.io.File;
15 import java.text.MessageFormat;
16
17 import org.eclipse.jgit.internal.JGitText;
18 import org.eclipse.jgit.internal.storage.pack.PackExt;
19 import org.eclipse.jgit.lib.ObjectId;
20
21
22
23
24
25
26 public class PackFile extends File {
27 private static final long serialVersionUID = 1L;
28
29 private static final String PREFIX = "pack-";
30
31 private final String base;
32
33
34 private final String id;
35
36 private final boolean hasOldPrefix;
37
38 private final PackExt packExt;
39
40 private static String createName(String id, PackExt extension) {
41 return PREFIX + id + '.' + extension.getExtension();
42 }
43
44
45
46
47
48
49
50 public PackFile(File file) {
51 this(file.getParentFile(), file.getName());
52 }
53
54
55
56
57
58
59
60
61
62
63
64 public PackFile(File directory, ObjectId id, PackExt ext) {
65 this(directory, id.name(), ext);
66 }
67
68
69
70
71
72
73
74
75
76
77
78 public PackFile(File directory, String id, PackExt ext) {
79 this(directory, createName(id, ext));
80 }
81
82
83
84
85
86
87
88
89
90 public PackFile(File directory, String name) {
91 super(directory, name);
92 int dot = name.lastIndexOf('.');
93
94 if (dot < 0) {
95 base = name;
96 hasOldPrefix = false;
97 packExt = null;
98 } else {
99 base = name.substring(0, dot);
100 String tail = name.substring(dot + 1);
101 packExt = getPackExt(tail);
102 String old = tail.substring(0,
103 tail.length() - getExtension().length());
104 hasOldPrefix = old.equals(getExtPrefix(true));
105 }
106
107 id = base.startsWith(PREFIX) ? base.substring(PREFIX.length()) : base;
108 }
109
110
111
112
113
114
115 public String getId() {
116 return id;
117 }
118
119
120
121
122
123
124 public PackExt getPackExt() {
125 return packExt;
126 }
127
128
129
130
131
132
133
134
135 public PackFile create(PackExt ext) {
136 return new PackFile(getParentFile(), getName(ext));
137 }
138
139
140
141
142
143
144
145
146 public PackFile createForDirectory(File directory) {
147 return new PackFile(directory, getName(false));
148 }
149
150
151
152
153
154
155
156
157
158 public PackFile createPreservedForDirectory(File directory) {
159 return new PackFile(directory, getName(true));
160 }
161
162 private String getName(PackExt ext) {
163 return base + '.' + getExtPrefix(hasOldPrefix) + ext.getExtension();
164 }
165
166 private String getName(boolean isPreserved) {
167 return base + '.' + getExtPrefix(isPreserved) + getExtension();
168 }
169
170 private String getExtension() {
171 return packExt == null ? "" : packExt.getExtension();
172 }
173
174 private static String getExtPrefix(boolean isPreserved) {
175 return isPreserved ? "old-" : "";
176 }
177
178 private static PackExt getPackExt(String endsWithExtension) {
179 for (PackExt ext : PackExt.values()) {
180 if (endsWithExtension.endsWith(ext.getExtension())) {
181 return ext;
182 }
183 }
184 throw new IllegalArgumentException(MessageFormat.format(
185 JGitText.get().unrecognizedPackExtension, endsWithExtension));
186 }
187 }