Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/HgBookmarks.java @ 628:6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Wed, 22 May 2013 15:52:31 +0200 |
| parents | 507602cb4fb3 |
| children |
comparison
equal
deleted
inserted
replaced
| 627:5153eb73b18d | 628:6526d8adbc0f |
|---|---|
| 50 | 50 |
| 51 HgBookmarks(Internals internals) { | 51 HgBookmarks(Internals internals) { |
| 52 repo = internals; | 52 repo = internals; |
| 53 } | 53 } |
| 54 | 54 |
| 55 /*package-local*/ void read() throws HgInvalidControlFileException { | 55 /*package-local*/ void read() throws HgRuntimeException { |
| 56 readBookmarks(); | 56 readBookmarks(); |
| 57 readActiveBookmark(); | 57 readActiveBookmark(); |
| 58 } | 58 } |
| 59 | 59 |
| 60 private void readBookmarks() throws HgInvalidControlFileException { | 60 private void readBookmarks() throws HgRuntimeException { |
| 61 final LogFacility log = repo.getLog(); | 61 final LogFacility log = repo.getLog(); |
| 62 File all = repo.getRepositoryFile(HgRepositoryFiles.Bookmarks); | 62 File all = repo.getRepositoryFile(HgRepositoryFiles.Bookmarks); |
| 63 LinkedHashMap<String, Nodeid> bm = new LinkedHashMap<String, Nodeid>(); | 63 try { |
| 64 if (all.canRead() && all.isFile()) { | 64 LinkedHashMap<String, Nodeid> bm = new LinkedHashMap<String, Nodeid>(); |
| 65 LineReader lr1 = new LineReader(all, log); | 65 if (all.canRead() && all.isFile()) { |
| 66 ArrayList<String> c = new ArrayList<String>(); | 66 LineReader lr1 = new LineReader(all, log); |
| 67 lr1.read(new LineReader.SimpleLineCollector(), c); | 67 ArrayList<String> c = new ArrayList<String>(); |
| 68 for (String s : c) { | 68 lr1.read(new LineReader.SimpleLineCollector(), c); |
| 69 int x = s.indexOf(' '); | 69 for (String s : c) { |
| 70 try { | 70 int x = s.indexOf(' '); |
| 71 if (x > 0) { | 71 try { |
| 72 Nodeid nid = Nodeid.fromAscii(s.substring(0, x)); | 72 if (x > 0) { |
| 73 String name = new String(s.substring(x+1)); | 73 Nodeid nid = Nodeid.fromAscii(s.substring(0, x)); |
| 74 if (repo.getRepo().getChangelog().isKnown(nid)) { | 74 String name = new String(s.substring(x+1)); |
| 75 // copy name part not to drag complete line | 75 if (repo.getRepo().getChangelog().isKnown(nid)) { |
| 76 bm.put(name, nid); | 76 // copy name part not to drag complete line |
| 77 bm.put(name, nid); | |
| 78 } else { | |
| 79 log.dump(getClass(), LogFacility.Severity.Info, "Bookmark %s points to non-existent revision %s, ignored.", name, nid); | |
| 80 } | |
| 77 } else { | 81 } else { |
| 78 log.dump(getClass(), LogFacility.Severity.Info, "Bookmark %s points to non-existent revision %s, ignored.", name, nid); | 82 log.dump(getClass(), LogFacility.Severity.Warn, "Can't parse bookmark entry: %s", s); |
| 79 } | 83 } |
| 80 } else { | 84 } catch (IllegalArgumentException ex) { |
| 81 log.dump(getClass(), LogFacility.Severity.Warn, "Can't parse bookmark entry: %s", s); | 85 log.dump(getClass(), LogFacility.Severity.Warn, ex, String.format("Can't parse bookmark entry: %s", s)); |
| 82 } | 86 } |
| 83 } catch (IllegalArgumentException ex) { | |
| 84 log.dump(getClass(), LogFacility.Severity.Warn, ex, String.format("Can't parse bookmark entry: %s", s)); | |
| 85 } | 87 } |
| 86 } | 88 bookmarks = bm; |
| 87 bookmarks = bm; | 89 } else { |
| 88 } else { | 90 bookmarks = Collections.emptyMap(); |
| 89 bookmarks = Collections.emptyMap(); | 91 } |
| 90 } | 92 if (bmFileTracker == null) { |
| 91 if (bmFileTracker == null) { | 93 bmFileTracker = new FileChangeMonitor(all); |
| 92 bmFileTracker = new FileChangeMonitor(all); | 94 } |
| 93 } | 95 bmFileTracker.touch(this); |
| 94 bmFileTracker.touch(this); | 96 } catch (HgInvalidControlFileException ex) { |
| 95 } | 97 // do not translate HgInvalidControlFileException into another HgInvalidControlFileException |
| 96 | 98 // but only HgInvalidFileException |
| 99 throw ex; | |
| 100 } catch (HgIOException ex) { | |
| 101 throw new HgInvalidControlFileException(ex, true); | |
| 102 } | |
| 103 } | |
| 104 | |
| 97 private void readActiveBookmark() throws HgInvalidControlFileException { | 105 private void readActiveBookmark() throws HgInvalidControlFileException { |
| 98 activeBookmark = null; | 106 activeBookmark = null; |
| 99 File active = repo.getRepositoryFile(HgRepositoryFiles.BookmarksCurrent); | 107 File active = repo.getRepositoryFile(HgRepositoryFiles.BookmarksCurrent); |
| 100 if (active.canRead() && active.isFile()) { | 108 try { |
| 101 LineReader lr2 = new LineReader(active, repo.getLog()); | 109 if (active.canRead() && active.isFile()) { |
| 102 ArrayList<String> c = new ArrayList<String>(2); | 110 LineReader lr2 = new LineReader(active, repo.getLog()); |
| 103 lr2.read(new LineReader.SimpleLineCollector(), c); | 111 ArrayList<String> c = new ArrayList<String>(2); |
| 104 if (c.size() > 0) { | 112 lr2.read(new LineReader.SimpleLineCollector(), c); |
| 105 activeBookmark = c.get(0); | 113 if (c.size() > 0) { |
| 106 } | 114 activeBookmark = c.get(0); |
| 107 } | 115 } |
| 108 if (activeTracker == null) { | 116 } |
| 109 activeTracker = new FileChangeMonitor(active); | 117 if (activeTracker == null) { |
| 110 } | 118 activeTracker = new FileChangeMonitor(active); |
| 111 activeTracker.touch(this); | 119 } |
| 112 } | 120 activeTracker.touch(this); |
| 113 | 121 } catch (HgIOException ex) { |
| 114 /*package-local*/void reloadIfChanged() throws HgInvalidControlFileException { | 122 throw new HgInvalidControlFileException(ex, true); |
| 123 } | |
| 124 } | |
| 125 | |
| 126 /*package-local*/void reloadIfChanged() throws HgRuntimeException { | |
| 115 assert activeTracker != null; | 127 assert activeTracker != null; |
| 116 assert bmFileTracker != null; | 128 assert bmFileTracker != null; |
| 117 if (bmFileTracker.changed(this)) { | 129 if (bmFileTracker.changed(this)) { |
| 118 readBookmarks(); | 130 readBookmarks(); |
| 119 } | 131 } |
