Mercurial > jhg
comparison src/com/tmate/hgkit/ll/LocalHgRepo.java @ 3:24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Mon, 20 Dec 2010 02:50:36 +0100 |
| parents | a3576694a4d1 |
| children | a78c980749e3 |
comparison
equal
deleted
inserted
replaced
| 2:08db726a0fb7 | 3:24bb4f365164 |
|---|---|
| 3 */ | 3 */ |
| 4 package com.tmate.hgkit.ll; | 4 package com.tmate.hgkit.ll; |
| 5 | 5 |
| 6 import java.io.File; | 6 import java.io.File; |
| 7 import java.io.IOException; | 7 import java.io.IOException; |
| 8 import java.lang.ref.SoftReference; | |
| 9 import java.util.HashMap; | |
| 8 | 10 |
| 9 /** | 11 /** |
| 10 * @author artem | 12 * @author artem |
| 11 */ | 13 */ |
| 12 public class LocalHgRepo extends HgRepository { | 14 public class LocalHgRepo extends HgRepository { |
| 28 | 30 |
| 29 @Override | 31 @Override |
| 30 public String getLocation() { | 32 public String getLocation() { |
| 31 return repoLocation; | 33 return repoLocation; |
| 32 } | 34 } |
| 35 | |
| 36 private final HashMap<String, SoftReference<RevlogStream>> streamsCache = new HashMap<String, SoftReference<RevlogStream>>(); | |
| 37 | |
| 38 /** | |
| 39 * path - repository storage path (i.e. one usually with .i or .d) | |
| 40 */ | |
| 41 @Override | |
| 42 protected RevlogStream resolve(String path) { | |
| 43 final SoftReference<RevlogStream> ref = streamsCache.get(path); | |
| 44 RevlogStream cached = ref == null ? null : ref.get(); | |
| 45 if (cached != null) { | |
| 46 return cached; | |
| 47 } | |
| 48 File f = new File(repoDir, path); | |
| 49 if (f.exists()) { | |
| 50 RevlogStream s = new RevlogStream(f); | |
| 51 streamsCache.put(path, new SoftReference<RevlogStream>(s)); | |
| 52 return s; | |
| 53 } | |
| 54 return null; | |
| 55 } | |
| 56 | |
| 57 @Override | |
| 58 public HgDataFile getFileNode(String path) { | |
| 59 String nPath = normalize(path); | |
| 60 String storagePath = toStoragePath(nPath); | |
| 61 RevlogStream content = resolve(storagePath); | |
| 62 // XXX no content when no file? or HgDataFile.exists() to detect that? How about files that were removed in previous releases? | |
| 63 return new HgDataFile(this, nPath, content); | |
| 64 } | |
| 65 | |
| 66 // FIXME much more to be done, see store.py:_hybridencode | |
| 67 private static String toStoragePath(String path) { | |
| 68 // XXX works for lowercase names only | |
| 69 return "store/data/" + path.replace('\\', '/') + ".i"; | |
| 70 } | |
| 71 | |
| 72 private static String normalize(String path) { | |
| 73 return path.replace('\\', '/'); | |
| 74 } | |
| 33 } | 75 } |
