Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/DirstateBuilder.java @ 529:95bdcf75e71e
Command to schedule addition/removal of repository files
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Mon, 21 Jan 2013 19:41:51 +0100 |
| parents | 2f9ed6bcefa2 |
| children | bd5926e24aa3 |
comparison
equal
deleted
inserted
replaced
| 528:f7fbf48b9383 | 529:95bdcf75e71e |
|---|---|
| 81 // `hg revert` puts "n 0 -1 unset" for the reverted file, so shall we | 81 // `hg revert` puts "n 0 -1 unset" for the reverted file, so shall we |
| 82 forget(fname); | 82 forget(fname); |
| 83 normal.put(fname, new HgDirstate.Record(0, -1, -1, fname, null)); | 83 normal.put(fname, new HgDirstate.Record(0, -1, -1, fname, null)); |
| 84 } | 84 } |
| 85 | 85 |
| 86 private void forget(Path fname) { | 86 public void recordAdded(Path fname, Flags flags, int size) { |
| 87 normal.remove(fname); | 87 forget(fname); |
| 88 added.remove(fname); | 88 added.put(fname, new HgDirstate.Record(0, -1, -1, fname, null)); |
| 89 removed.remove(fname); | 89 } |
| 90 merged.remove(fname); | 90 |
| 91 public void recordRemoved(Path fname) { | |
| 92 HgDirstate.Record r = forget(fname); | |
| 93 HgDirstate.Record n; | |
| 94 if (r == null) { | |
| 95 n = new HgDirstate.Record(0, -1, -1, fname, null); | |
| 96 } else { | |
| 97 n = new HgDirstate.Record(r.mode(), r.size(), r.modificationTime(), fname, r.copySource()); | |
| 98 } | |
| 99 removed.put(fname, n); | |
| 100 } | |
| 101 | |
| 102 private HgDirstate.Record forget(Path fname) { | |
| 103 HgDirstate.Record r; | |
| 104 if ((r = normal.remove(fname)) != null) { | |
| 105 return r; | |
| 106 } | |
| 107 if ((r = added.remove(fname)) != null) { | |
| 108 return r; | |
| 109 } | |
| 110 if ((r = removed.remove(fname)) != null) { | |
| 111 return r; | |
| 112 } | |
| 113 return merged.remove(fname); | |
| 91 } | 114 } |
| 92 | 115 |
| 93 public void serialize(WritableByteChannel dest) throws IOException { | 116 public void serialize(WritableByteChannel dest) throws IOException { |
| 94 assert parent1 != null : "Parent(s) of the working directory shall be set first"; | 117 assert parent1 != null : "Parent(s) of the working directory shall be set first"; |
| 95 ByteBuffer bb = ByteBuffer.allocate(256); | 118 ByteBuffer bb = ByteBuffer.allocate(256); |
| 103 } | 126 } |
| 104 bb.clear(); | 127 bb.clear(); |
| 105 // entries | 128 // entries |
| 106 @SuppressWarnings("unchecked") | 129 @SuppressWarnings("unchecked") |
| 107 Map<Path, HgDirstate.Record>[] all = new Map[] {normal, added, removed, merged}; | 130 Map<Path, HgDirstate.Record>[] all = new Map[] {normal, added, removed, merged}; |
| 131 ByteBuffer recordTypes = ByteBuffer.allocate(4); | |
| 132 recordTypes.put((byte) 'n').put((byte) 'a').put((byte) 'r').put((byte) 'm').flip(); | |
| 108 for (Map<Path, HgDirstate.Record> m : all) { | 133 for (Map<Path, HgDirstate.Record> m : all) { |
| 134 final byte recordType = recordTypes.get(); | |
| 109 for (HgDirstate.Record r : m.values()) { | 135 for (HgDirstate.Record r : m.values()) { |
| 110 // regular entry is 1+4+4+4+4+fname.length bytes | 136 // regular entry is 1+4+4+4+4+fname.length bytes |
| 111 // it might get extended with copy origin, prepended with 0 byte | 137 // it might get extended with copy origin, prepended with 0 byte |
| 112 byte[] fname = encodingHelper.toDirstate(r.name()); | 138 byte[] fname = encodingHelper.toDirstate(r.name()); |
| 113 byte[] copyOrigin = r.copySource() == null ? null : encodingHelper.toDirstate(r.copySource()); | 139 byte[] copyOrigin = r.copySource() == null ? null : encodingHelper.toDirstate(r.copySource()); |
| 114 int length = fname.length + (copyOrigin == null ? 0 : (1 + copyOrigin.length)); | 140 int length = fname.length + (copyOrigin == null ? 0 : (1 + copyOrigin.length)); |
| 115 bb = ensureCapacity(bb, 17 + length); | 141 bb = ensureCapacity(bb, 17 + length); |
| 116 bb.put((byte) 'n'); | 142 bb.put(recordType); |
| 117 bb.putInt(r.mode()); | 143 bb.putInt(r.mode()); |
| 118 bb.putInt(r.size()); | 144 bb.putInt(r.size()); |
| 119 bb.putInt(r.modificationTime()); | 145 bb.putInt(r.modificationTime()); |
| 120 bb.putInt(length); | 146 bb.putInt(length); |
| 121 bb.put(fname); | 147 bb.put(fname); |
