/** * Creates internal hive format version info. * * @throws IOException */ private void createVersionInfo() throws IOException { final byte[] bytes = CURRENTVERSION.getBytes(); final Tree root = new Tree(repository); FileTreeEntry versionFile = root.addFile(VERSION_PATH); versionFile.setId(writeBytes(bytes)); Commit commit = commitTree(root); updateHead(commit); }
public Version put(final String key, final byte[] data, final List<Version> parents) { try { Tree root = getLatestRoot(); for (Version parent : parents) { VersionImpl version = (VersionImpl) parent; TreeEntry treeMember = root.findBlobMember(version.getEntry().getFullName()); if (treeMember != null) { treeMember.delete(); } } VersionImpl version = updateTree(root, key, data); return version; } catch (Exception e) { throw new SwarmdbException("Unable to update key: " + key, e); } }
public List<Version> get(final String key) { ArrayList<Version> result = new ArrayList<Version>(); try { Commit commit = getLastCommit(); Tree root = commit.getTree(); TreeEntry subTreeEntry = root.findTreeMember(key); if (subTreeEntry instanceof Tree) { Tree subTree = (Tree) subTreeEntry; for (TreeEntry entry : subTree.members()) { if (entry instanceof FileTreeEntry) { result.add(new VersionImpl(commit, key, (FileTreeEntry) entry)); } } } } catch (Exception e) { throw new SwarmdbException("Unable to update key: " + key, e); } return result; }
private VersionImpl updateTree(final Tree root, final String key, final byte[] data) throws IOException { ObjectId objectId = writeBytes(data); FileTreeEntry fileTreeEntry = root.addFile(key + "/" + objectId.name()); fileTreeEntry.setId(objectId); Commit commit = commitTree(root); updateHead(commit); VersionImpl version = new VersionImpl(commit, key, fileTreeEntry); return version; }