Mercurial > hg4j
diff src/org/tmatesoft/hg/internal/FNCacheFile.java @ 559:6ca3d0c5b4bc
Commit: tests and fixes for defects discovered
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Mon, 25 Feb 2013 19:48:20 +0100 |
parents | 9edfd5a223b8 |
children | 5e0313485eef |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/FNCacheFile.java Mon Feb 25 18:41:44 2013 +0100 +++ b/src/org/tmatesoft/hg/internal/FNCacheFile.java Mon Feb 25 19:48:20 2013 +0100 @@ -21,27 +21,35 @@ import java.io.IOException; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.List; import org.tmatesoft.hg.util.Path; /** + * Append-only fncache support + * * <blockquote> * The fncache file contains the paths of all filelog files in the store as encoded by mercurial.filelog.encodedir. The paths are separated by '\n' (LF). * </blockquote> * @see http://mercurial.selenic.com/wiki/fncacheRepoFormat + * + * * @author Artem Tikhomirov * @author TMate Software Ltd. */ public class FNCacheFile { private final Internals repo; - private final ArrayList<Path> files; +// private final List<Path> files; + private List<Path> added; public FNCacheFile(Internals internalRepo) { repo = internalRepo; - files = new ArrayList<Path>(); +// files = new ArrayList<Path>(); } + /* + * For append-only option, we don't care reading the original content public void read(Path.Source pathFactory) throws IOException { File f = fncacheFile(); files.clear(); @@ -52,20 +60,22 @@ // names in fncache are in local encoding, shall translate to unicode new LineReader(f, repo.getSessionContext().getLog(), repo.getFilenameEncoding()).read(new LineReader.SimpleLineCollector(), entries); for (String e : entries) { + // FIXME plain wrong, need either to decode paths and strip off .i/.d or (if keep names as is) change write() files.add(pathFactory.path(e)); } } + */ public void write() throws IOException { - if (files.isEmpty()) { + if (added == null || added.isEmpty()) { return; } File f = fncacheFile(); f.getParentFile().mkdirs(); final Charset filenameEncoding = repo.getFilenameEncoding(); - FileOutputStream fncacheFile = new FileOutputStream(f); - for (Path p : files) { - String s = "data/" + p.toString() + ".i"; // TODO post-1.0 this is plain wrong. (a) likely need .d files, too; (b) what about dh/ location? + FileOutputStream fncacheFile = new FileOutputStream(f, true); + for (Path p : added) { + String s = "data/" + p.toString() + ".i"; // TODO post-1.0 this is plain wrong. (a) need .d files, too; (b) what about dh/ location? fncacheFile.write(s.getBytes(filenameEncoding)); fncacheFile.write(0x0A); // http://mercurial.selenic.com/wiki/fncacheRepoFormat } @@ -73,7 +83,10 @@ } public void add(Path p) { - files.add(p); + if (added == null) { + added = new ArrayList<Path>(); + } + added.add(p); } private File fncacheFile() {