Example usage for org.eclipse.jgit.internal.storage.file LockFile commit

List of usage examples for org.eclipse.jgit.internal.storage.file LockFile commit

Introduction

In this page you can find the example usage for org.eclipse.jgit.internal.storage.file LockFile commit.

Prototype

public boolean commit() 

Source Link

Document

Commit this change and release the lock.

Usage

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  www .  ja  va 2 s.  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 . c o 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;//w w w .j  ava  2s  . 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);
    }//  w  w w  .j a  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
    ///*  www.j  av a 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  w ww  .  j  av a  2s  . co  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.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);
        }// ww  w .  ja va 2  s . 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;
    }/* www .j a  v a  2 s  . c  om*/

    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;
}