List of usage examples for org.eclipse.jgit.internal.storage.file LockFile lock
public boolean lock() throws IOException
From source file:com.collabnet.gerrit.SecureStoreJasypt.java
License:Apache License
private static void saveSecure(final FileBasedConfig sec) throws IOException { if (FileUtil.modified(sec)) { final byte[] out = Constants.encode(sec.toText()); final File path = sec.getFile(); final LockFile lf = new LockFile(path, FS.DETECTED); if (!lf.lock()) { throw new IOException("Cannot lock " + path); }/*from w w w .ja v a 2s .c o m*/ try { FileUtil.chmod(0600, new File(path.getParentFile(), path.getName() + ".lock")); lf.write(out); if (!lf.commit()) { throw new IOException("Cannot commit write to " + path); } } finally { lf.unlock(); } } }
From source file:com.google.gerrit.pgm.init.api.InitUtil.java
License:Apache License
public static void copy(Path dst, byte[] buf) throws FileNotFoundException, IOException { // If the file already has the content we want to put there, // don't attempt to overwrite the file. ///*from ww w . j a v a 2 s . co m*/ try (InputStream in = Files.newInputStream(dst)) { if (Arrays.equals(buf, ByteStreams.toByteArray(in))) { return; } } catch (NoSuchFileException notFound) { // Fall through and write the file. } Files.createDirectories(dst.getParent()); LockFile lf = new LockFile(dst.toFile(), FS.DETECTED); if (!lf.lock()) { throw new IOException("Cannot lock " + dst); } try { try (InputStream in = new ByteArrayInputStream(buf); OutputStream out = lf.getOutputStream()) { ByteStreams.copy(in, out); } if (!lf.commit()) { throw new IOException("Cannot commit " + dst); } } finally { lf.unlock(); } }
From source file:com.google.gerrit.pgm.init.InitContainer.java
License:Apache License
@Override public void run() throws FileNotFoundException, IOException { ui.header("Container Process"); container.string("Run as", "user", username()); container.string("Java runtime", "javaHome", javaHome()); Path myWar;/*from w ww.ja va 2 s . c o m*/ try { myWar = GerritLauncher.getDistributionArchive().toPath(); } catch (FileNotFoundException e) { System.err.println("warn: Cannot find distribution archive (e.g. gerrit.war)"); myWar = null; } String path = container.get("war"); if (path != null) { path = container.string("Gerrit runtime", "war", myWar != null ? myWar.toAbsolutePath().toString() : null); if (path == null || path.isEmpty()) { throw die("container.war is required"); } } else if (myWar != null) { final boolean copy; final Path siteWar = site.gerrit_war; if (Files.exists(siteWar)) { copy = ui.yesno(true, "Upgrade %s", siteWar); } else { copy = ui.yesno(true, "Copy %s to %s", myWar.getFileName(), siteWar); if (copy) { container.unset("war"); } else { container.set("war", myWar.toAbsolutePath().toString()); } } if (copy) { if (!ui.isBatch()) { System.err.format("Copying %s to %s", myWar.getFileName(), siteWar); System.err.println(); } try (InputStream in = Files.newInputStream(myWar)) { Files.createDirectories(siteWar.getParent()); LockFile lf = new LockFile(siteWar.toFile(), FS.DETECTED); if (!lf.lock()) { throw new IOException("Cannot lock " + siteWar); } try { try (OutputStream out = lf.getOutputStream()) { ByteStreams.copy(in, out); } if (!lf.commit()) { throw new IOException("Cannot commit " + siteWar); } } finally { lf.unlock(); } } } } }
From source file:com.google.gerrit.pgm.ProtoGen.java
License:Apache License
@Override public int run() throws Exception { LockFile lock = new LockFile(file.getAbsoluteFile(), FS.DETECTED); if (!lock.lock()) { throw die("Cannot lock " + file); }/*from w w w . ja v a 2 s .c o m*/ try { JavaSchemaModel jsm = new JavaSchemaModel(ReviewDb.class); try (OutputStream o = lock.getOutputStream(); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(o, "UTF-8")))) { String header; try (InputStream in = getClass().getResourceAsStream("ProtoGenHeader.txt")) { ByteBuffer buf = IO.readWholeStream(in, 1024); int ptr = buf.arrayOffset() + buf.position(); int len = buf.remaining(); header = new String(buf.array(), ptr, len, "UTF-8"); } String version = com.google.gerrit.common.Version.getVersion(); out.write(header.replace("@@VERSION@@", version)); jsm.generateProto(out); out.flush(); } if (!lock.commit()) { throw die("Could not write to " + file); } } finally { lock.unlock(); } System.out.println("Created " + file.getPath()); return 0; }
From source file:com.google.gerrit.server.git.LocalDiskRepositoryManager.java
License:Apache License
@Override public void setProjectDescription(final Project.NameKey name, final String description) { // Update git's description file, in case gitweb is being used ////from www . j a va 2 s . c o m try (Repository e = openRepository(name)) { final String old = getProjectDescription(e); if ((old == null && description == null) || (old != null && old.equals(description))) { return; } final LockFile f = new LockFile(new File(e.getDirectory(), "description"), FS.DETECTED); if (f.lock()) { String d = description; if (d != null) { d = d.trim(); if (d.length() > 0) { d += "\n"; } } else { d = ""; } f.write(Constants.encode(d)); f.commit(); } } catch (IOException e) { log.error("Cannot update description for " + name, e); } }
From source file:com.googlesource.gerrit.plugins.lfs.locks.LfsProjectLocks.java
License:Apache License
LfsLock createLock(CurrentUser user, LfsCreateLockInput input) throws LfsException { log.atFine().log("Create lock for %s in project %s", input.path, project); String lockId = toLockId.apply(input.path); LfsLock lock = locks.getIfPresent(lockId); if (lock != null) { throw new LfsLockExistsException(lock); }//from ww w . j a va 2 s . c o m lock = new LfsLock(lockId, input.path, LfsDateTime.now(), new LfsLockOwner(user.getUserName().get())); LockFile fileLock = new LockFile(locksPath.resolve(lockId).toFile()); try { if (!fileLock.lock()) { log.atWarning().log("Cannot lock path [%s] in project %s", input.path, project); throw new LfsLockExistsException(lock); } } catch (IOException e) { String error = String.format("Locking path [%s] in project %s failed with error %s", input.path, project, e.getMessage()); log.atWarning().log(error); throw new LfsException(error); } try { try (OutputStreamWriter out = new OutputStreamWriter(fileLock.getOutputStream())) { gson.toJson(lock, out); } catch (IOException e) { String error = String.format("Locking path [%s] in project %s failed during write with error %s", input.path, project, e.getMessage()); log.atWarning().log(error); throw new LfsException(error); } if (!fileLock.commit()) { String error = String.format("Committing lock to path [%s] in project %s failed", input.path, project); log.atWarning().log(error); throw new LfsException(error); } // put lock object to cache while file lock is being hold so that // there is no chance that other process performs lock operation // in the meantime (either cache returns with existing object or // LockFile.lock fails on locking attempt) locks.put(lockId, lock); } finally { fileLock.unlock(); } return lock; }
From source file:com.googlesource.gerrit.plugins.lfs.locks.LfsProjectLocks.java
License:Apache License
void deleteLock(LfsLock lock) throws LfsException { LockFile fileLock = new LockFile(locksPath.resolve(lock.id).toFile()); try {//w ww . java 2 s. co m if (!fileLock.lock()) { String error = String.format("Deleting lock on path [%s] in project %s is not possible", lock.path, project); log.atWarning().log(error); throw new LfsException(error); } } catch (IOException e) { String error = String.format("Getting lock on path [%s] in project %s failed with error %s", lock.path, project, e.getMessage()); log.atWarning().log(error); throw new LfsException(error); } try { Files.deleteIfExists(locksPath.resolve(lock.id)); locks.invalidate(lock.id); } catch (IOException e) { String error = String.format("Deleting lock on path [%s] in project %s failed with error %s", lock.path, project, e.getMessage()); log.atWarning().log(error); throw new LfsException(error); } finally { fileLock.unlock(); } }
From source file:com.googlesource.gerrit.plugins.secureconfig.SecureConfigStore.java
License:Apache License
private void saveSecure(final FileBasedConfig sec) throws IOException { if (FileUtil.modified(sec)) { final byte[] out = Constants.encode(sec.toText()); final File path = sec.getFile(); final LockFile lf = new LockFile(path); if (!lf.lock()) { throw new IOException("Cannot lock " + path); }/*from w ww.j a va 2s. c o m*/ try { FileUtil.chmod(0600, new File(path.getParentFile(), path.getName() + ".lock")); lf.write(out); if (!lf.commit()) { throw new IOException("Cannot commit write to " + path); } } finally { lf.unlock(); } } }
From source file:com.microsoft.gittf.core.tasks.FetchTask.java
License:Open Source License
private boolean writeFetchHead(final ObjectId commitID, final int changesetID) throws IOException { Ref fetchHeadRef = repository.getRef(Constants.FETCH_HEAD); boolean referencesEqual = fetchHeadRef == null ? false : fetchHeadRef.getObjectId().equals(commitID); if (referencesEqual) { return false; }//w w w . ja v a 2 s . c o m final File refFile = new File(repository.getDirectory(), Constants.FETCH_HEAD); final LockFile lockFile = new LockFile(refFile, repository.getFS()); if (lockFile.lock()) { try { BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(lockFile.getOutputStream(), Charset.forName("UTF-8"))); //$NON-NLS-1$ try { writer.append(MessageFormat.format("{0}\t\t{1}", commitID.getName(), //$NON-NLS-1$ Messages.formatString("FetchTask.RefLogFormat", //$NON-NLS-1$ Integer.toString(changesetID)))); } finally { writer.close(); } lockFile.commit(); } finally { lockFile.unlock(); } } return true; }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.FetchCommandImpl.java
License:Apache License
private void unlockRef(Repository db, Ref ref) throws IOException, InterruptedException { File refFile = new File(db.getDirectory(), ref.getName()); File refLockFile = new File(db.getDirectory(), ref.getName() + ".lock"); LockFile lock = new LockFile(refFile, FS.DETECTED); try {// w w w .j ava 2s . c om if (!lock.lock()) { LOG.warn("Cannot lock the ref " + ref.getName() + ", will wait and try again"); Thread.sleep(5000); if (lock.lock()) { LOG.warn("Successfully lock the ref " + ref.getName()); } else { if (FileUtil.delete(refLockFile)) { LOG.warn("Remove ref lock " + refLockFile.getAbsolutePath()); } else { LOG.warn("Cannot remove ref lock " + refLockFile.getAbsolutePath() + ", fetch will probably fail. Please remove lock manually."); } } } } finally { lock.unlock(); } }