PackLockImpl.java
- /*
- * Copyright (C) 2009, Google Inc. and others
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0 which is available at
- * https://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- package org.eclipse.jgit.internal.storage.file;
- import java.io.File;
- import java.io.IOException;
- import org.eclipse.jgit.lib.Constants;
- import org.eclipse.jgit.transport.PackLock;
- import org.eclipse.jgit.util.FS;
- import org.eclipse.jgit.util.FileUtils;
- /**
- * Keeps track of a {@link org.eclipse.jgit.internal.storage.file.Pack}'s
- * associated <code>.keep</code> file.
- */
- public class PackLockImpl implements PackLock {
- private final File keepFile;
- /**
- * Create a new lock for a pack file.
- *
- * @param packFile
- * location of the <code>pack-*.pack</code> file.
- * @param fs
- * the filesystem abstraction used by the repository.
- */
- public PackLockImpl(File packFile, FS fs) {
- final File p = packFile.getParentFile();
- final String n = packFile.getName();
- keepFile = new File(p, n.substring(0, n.length() - 5) + ".keep"); //$NON-NLS-1$
- }
- /**
- * Create the <code>pack-*.keep</code> file, with the given message.
- *
- * @param msg
- * message to store in the file.
- * @return true if the keep file was successfully written; false otherwise.
- * @throws java.io.IOException
- * the keep file could not be written.
- */
- public boolean lock(String msg) throws IOException {
- if (msg == null)
- return false;
- if (!msg.endsWith("\n")) //$NON-NLS-1$
- msg += "\n"; //$NON-NLS-1$
- final LockFile lf = new LockFile(keepFile);
- if (!lf.lock())
- return false;
- lf.write(Constants.encode(msg));
- return lf.commit();
- }
- @Override
- public void unlock() throws IOException {
- FileUtils.delete(keepFile);
- }
- }