kitaev@213: /* kitaev@213: * Copyright (c) 2011 TMate Software Ltd kitaev@213: * kitaev@213: * This program is free software; you can redistribute it and/or modify kitaev@213: * it under the terms of the GNU General Public License as published by kitaev@213: * the Free Software Foundation; version 2 of the License. kitaev@213: * kitaev@213: * This program is distributed in the hope that it will be useful, kitaev@213: * but WITHOUT ANY WARRANTY; without even the implied warranty of kitaev@213: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the kitaev@213: * GNU General Public License for more details. kitaev@213: * kitaev@213: * For information on how to redistribute this software under kitaev@213: * the terms of a license other than GNU General Public License kitaev@213: * contact TMate Software at support@hg4j.com kitaev@213: */ kitaev@213: package org.tmatesoft.hg.internal; kitaev@213: kitaev@213: import static org.tmatesoft.hg.internal.RequiresFile.*; kitaev@213: kitaev@213: import java.io.File; kitaev@213: import java.io.FileOutputStream; kitaev@213: import java.io.IOException; kitaev@213: import java.util.ArrayList; kitaev@213: import java.util.List; kitaev@213: kitaev@213: import org.tmatesoft.hg.repo.HgRepository; kitaev@213: import org.tmatesoft.hg.util.PathRewrite; kitaev@213: kitaev@213: /** kitaev@213: * Fields/members that shall not be visible kitaev@213: * kitaev@213: * @author Artem Tikhomirov kitaev@213: * @author TMate Software Ltd. kitaev@213: */ kitaev@213: public class Internals { kitaev@213: kitaev@213: private int requiresFlags = 0; kitaev@213: private List filterFactories; kitaev@213: kitaev@213: kitaev@213: public Internals() { kitaev@213: } kitaev@213: kitaev@213: public/*for tests, otherwise pkg*/ void setStorageConfig(int version, int flags) { kitaev@213: requiresFlags = flags; kitaev@213: } kitaev@213: kitaev@213: // XXX perhaps, should keep both fields right here, not in the HgRepository kitaev@213: public PathRewrite buildDataFilesHelper() { kitaev@213: return new StoragePathHelper((requiresFlags & STORE) != 0, (requiresFlags & FNCACHE) != 0, (requiresFlags & DOTENCODE) != 0); kitaev@213: } kitaev@213: kitaev@213: public PathRewrite buildRepositoryFilesHelper() { kitaev@213: if ((requiresFlags & STORE) != 0) { kitaev@213: return new PathRewrite() { kitaev@213: public String rewrite(String path) { kitaev@213: return "store/" + path; kitaev@213: } kitaev@213: }; kitaev@213: } else { kitaev@213: return new PathRewrite() { kitaev@213: public String rewrite(String path) { kitaev@213: //no-op kitaev@213: return path; kitaev@213: } kitaev@213: }; kitaev@213: } kitaev@213: } kitaev@213: kitaev@213: public ConfigFile newConfigFile() { kitaev@213: return new ConfigFile(); kitaev@213: } kitaev@213: kitaev@213: public List getFilters(HgRepository hgRepo, ConfigFile cfg) { kitaev@213: if (filterFactories == null) { kitaev@213: filterFactories = new ArrayList(); kitaev@213: if (cfg.hasEnabledExtension("eol")) { kitaev@213: NewlineFilter.Factory ff = new NewlineFilter.Factory(); kitaev@213: ff.initialize(hgRepo, cfg); kitaev@213: filterFactories.add(ff); kitaev@213: } kitaev@213: if (cfg.hasEnabledExtension("keyword")) { kitaev@213: KeywordFilter.Factory ff = new KeywordFilter.Factory(); kitaev@213: ff.initialize(hgRepo, cfg); kitaev@213: filterFactories.add(ff); kitaev@213: } kitaev@213: } kitaev@213: return filterFactories; kitaev@213: } kitaev@213: kitaev@213: public void initEmptyRepository(File hgDir) throws IOException { kitaev@213: hgDir.mkdir(); kitaev@213: FileOutputStream requiresFile = new FileOutputStream(new File(hgDir, "requires")); kitaev@213: StringBuilder sb = new StringBuilder(40); kitaev@213: sb.append("revlogv1\n"); kitaev@213: if ((requiresFlags & STORE) != 0) { kitaev@213: sb.append("store\n"); kitaev@213: } kitaev@213: if ((requiresFlags & FNCACHE) != 0) { kitaev@213: sb.append("fncache\n"); kitaev@213: } kitaev@213: if ((requiresFlags & DOTENCODE) != 0) { kitaev@213: sb.append("dotencode\n"); kitaev@213: } kitaev@213: requiresFile.write(sb.toString().getBytes()); kitaev@213: requiresFile.close(); kitaev@213: new File(hgDir, "store").mkdir(); // with that, hg verify says ok. kitaev@213: } kitaev@213: kitaev@213: }