Mercurial > hg4j
comparison src/com/tmate/hgkit/ll/LocalHgRepo.java @ 20:11cfabe692b3
Status operation for two repository revisions (no local dir involved)
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 04 Jan 2011 02:08:25 +0100 |
| parents | 02ee376bee79 |
| children | e929cecae4e1 |
comparison
equal
deleted
inserted
replaced
| 19:40532cdc92fc | 20:11cfabe692b3 |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2010 Artem Tikhomirov | 2 * Copyright (c) 2010, 2011 Artem Tikhomirov |
| 3 */ | 3 */ |
| 4 package com.tmate.hgkit.ll; | 4 package com.tmate.hgkit.ll; |
| 5 | 5 |
| 6 import java.io.BufferedReader; | 6 import java.io.BufferedReader; |
| 7 import java.io.File; | 7 import java.io.File; |
| 44 public String getLocation() { | 44 public String getLocation() { |
| 45 return repoLocation; | 45 return repoLocation; |
| 46 } | 46 } |
| 47 | 47 |
| 48 @Override | 48 @Override |
| 49 public void status(int rev1, int rev2, StatusInspector inspector) { | 49 public void status(int rev1, int rev2, final StatusInspector inspector) { |
| 50 throw HgRepository.notImplemented(); | 50 final HashMap<String, Nodeid> idsMap = new HashMap<String, Nodeid>(); |
| 51 final HashMap<String, String> flagsMap = new HashMap<String, String>(); | |
| 52 HgManifest.Inspector collect = new HgManifest.Inspector() { | |
| 53 | |
| 54 | |
| 55 public boolean next(Nodeid nid, String fname, String flags) { | |
| 56 idsMap.put(fname, nid); | |
| 57 flagsMap.put(fname, flags); | |
| 58 return true; | |
| 59 } | |
| 60 | |
| 61 public boolean end(int revision) { | |
| 62 return false; | |
| 63 } | |
| 64 | |
| 65 public boolean begin(int revision, Nodeid nid) { | |
| 66 return true; | |
| 67 } | |
| 68 }; | |
| 69 getManifest().walk(rev1, rev1, collect); | |
| 70 | |
| 71 HgManifest.Inspector compare = new HgManifest.Inspector() { | |
| 72 | |
| 73 public boolean begin(int revision, Nodeid nid) { | |
| 74 return true; | |
| 75 } | |
| 76 | |
| 77 public boolean next(Nodeid nid, String fname, String flags) { | |
| 78 Nodeid nidR1 = idsMap.remove(fname); | |
| 79 String flagsR1 = flagsMap.remove(fname); | |
| 80 if (nidR1 == null) { | |
| 81 inspector.added(fname); | |
| 82 } else { | |
| 83 if (nidR1.compareTo(nid) == 0 && ((flags == null && flagsR1 == null) || flags.equals(flagsR1))) { | |
| 84 inspector.clean(fname); | |
| 85 } else { | |
| 86 inspector.modified(fname); | |
| 87 } | |
| 88 } | |
| 89 return true; | |
| 90 } | |
| 91 | |
| 92 public boolean end(int revision) { | |
| 93 for (String fname : idsMap.keySet()) { | |
| 94 inspector.removed(fname); | |
| 95 } | |
| 96 if (idsMap.size() != flagsMap.size()) { | |
| 97 throw new IllegalStateException(); | |
| 98 } | |
| 99 return false; | |
| 100 } | |
| 101 }; | |
| 102 getManifest().walk(rev2, rev2, compare); | |
| 51 } | 103 } |
| 52 | 104 |
| 53 public void statusLocal(int rev1, StatusInspector inspector) { | 105 public void statusLocal(int rev1, StatusInspector inspector) { |
| 54 LinkedList<File> folders = new LinkedList<File>(); | 106 LinkedList<File> folders = new LinkedList<File>(); |
| 55 final File rootDir = repoDir.getParentFile(); | 107 final File rootDir = repoDir.getParentFile(); |
