comparison src/org/tmatesoft/hg/internal/COWTransaction.java @ 635:4ec2d44e2bf3

Compound test scenario for checkout, add, remove, revert and commit
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 06 Jun 2013 18:42:38 +0200
parents 99ad1e3a4e4d
children 12a4f60ea972
comparison
equal deleted inserted replaced
634:170b6ecc890e 635:4ec2d44e2bf3
44 fileHelper = new FileUtils(ctxSource.getSessionContext().getLog()); 44 fileHelper = new FileUtils(ctxSource.getSessionContext().getLog());
45 } 45 }
46 46
47 @Override 47 @Override
48 public File prepare(File f) throws HgIOException { 48 public File prepare(File f) throws HgIOException {
49 if (!f.exists()) {
50 record(f, null);
51 try {
52 f.getParentFile().mkdirs();
53 f.createNewFile();
54 return f;
55 } catch (IOException ex) {
56 throw new HgIOException("Failed to create new file", ex, f);
57 }
58 }
59 if (known(f)) { 49 if (known(f)) {
60 return f; 50 return f;
51 }
52 if (!f.exists()) {
53 return recordNonExistent(f);
61 } 54 }
62 final File parentDir = f.getParentFile(); 55 final File parentDir = f.getParentFile();
63 assert parentDir.canWrite(); 56 assert parentDir.canWrite();
64 File copy = new File(parentDir, f.getName() + ".hg4j.copy"); 57 File copy = new File(parentDir, f.getName() + ".hg4j.copy");
65 fileHelper.copy(f, copy); 58 fileHelper.copy(f, copy);
82 75
83 @Override 76 @Override
84 public File prepare(File origin, File backup) throws HgIOException { 77 public File prepare(File origin, File backup) throws HgIOException {
85 if (known(origin)) { 78 if (known(origin)) {
86 return origin; 79 return origin;
80 }
81 if (!origin.exists()) {
82 return recordNonExistent(origin);
87 } 83 }
88 fileHelper.copy(origin, backup); 84 fileHelper.copy(origin, backup);
89 final RollbackEntry e = record(origin, backup); 85 final RollbackEntry e = record(origin, backup);
90 e.keepBackup = true; 86 e.keepBackup = true;
91 return origin; 87 return origin;
137 success.add(e); 133 success.add(e);
138 it.remove(); 134 it.remove();
139 } 135 }
140 } 136 }
141 137
138 private File recordNonExistent(File f) throws HgIOException {
139 record(f, null);
140 try {
141 f.getParentFile().mkdirs();
142 f.createNewFile();
143 return f;
144 } catch (IOException ex) {
145 throw new HgIOException("Failed to create new file", ex, f);
146 }
147 }
148
142 private RollbackEntry record(File origin, File backup) { 149 private RollbackEntry record(File origin, File backup) {
143 final RollbackEntry e = new RollbackEntry(origin, backup); 150 final RollbackEntry e = new RollbackEntry(origin, backup);
144 entries.add(e); 151 entries.add(e);
145 return e; 152 return e;
146 } 153 }
147 154
148 private boolean known(File f) { 155 private boolean known(File f) {
149 for (RollbackEntry e : entries) { 156 RollbackEntry e = lookup(f);
150 if (e.origin.equals(f)) { 157 return e != null;
151 return true; 158 }
152 } 159
160 private RollbackEntry find(File f) {
161 RollbackEntry e = lookup(f);
162 if (e != null) {
163 return e;
153 } 164 }
154 return false; 165 assert false;
166 return new RollbackEntry(f,f);
155 } 167 }
156 private RollbackEntry find(File f) { 168
169 private RollbackEntry lookup(File f) {
157 for (RollbackEntry e : entries) { 170 for (RollbackEntry e : entries) {
158 if (e.origin.equals(f)) { 171 if (e.origin.equals(f)) {
159 return e; 172 return e;
160 } 173 }
161 } 174 }
162 assert false; 175 return null;
163 return new RollbackEntry(f,f);
164 } 176 }
165 177
166 private static class RollbackEntry { 178 private static class RollbackEntry {
167 public final File origin; 179 public final File origin;
168 public final File backup; // may be null to indicate file didn't exist 180 public final File backup; // may be null to indicate file didn't exist
169 public boolean success = false; 181 public boolean success = false;
170 public IOException failure = null; 182 public IOException failure = null;