blob: 2b7522097c9ad33ce58613e3052e688c245d432d [file] [log] [blame]
/*
* Copyright (C) 2015 Obeo. 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.hooks;
import java.io.PrintStream;
import java.text.MessageFormat;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.util.LfsFactory;
/**
* Factory class for instantiating supported hooks.
*
* @since 4.0
*/
public class Hooks {
/**
* Create pre-commit hook for the given repository with the default error
* stream
*
* @param repo
* a {@link org.eclipse.jgit.lib.Repository} object.
* @param outputStream
* The output stream, or {@code null} to use {@code System.out}
* @return The pre-commit hook for the given repository.
*/
public static PreCommitHook preCommit(Repository repo,
PrintStream outputStream) {
return new PreCommitHook(repo, outputStream);
}
/**
* Create pre-commit hook for the given repository
*
* @param repo
* a {@link org.eclipse.jgit.lib.Repository} object.
* @param outputStream
* The output stream, or {@code null} to use {@code System.out}
* @param errorStream
* The error stream, or {@code null} to use {@code System.err}
* @return The pre-commit hook for the given repository.
* @since 5.6
*/
public static PreCommitHook preCommit(Repository repo,
PrintStream outputStream, PrintStream errorStream) {
return new PreCommitHook(repo, outputStream, errorStream);
}
/**
* Create post-commit hook for the given repository with the default error
* stream
*
* @param repo
* a {@link org.eclipse.jgit.lib.Repository} object.
* @param outputStream
* The output stream, or {@code null} to use {@code System.out}
* @return The post-commit hook for the given repository.
* @since 4.5
*/
public static PostCommitHook postCommit(Repository repo,
PrintStream outputStream) {
return new PostCommitHook(repo, outputStream);
}
/**
* Create post-commit hook for the given repository
*
* @param repo
* a {@link org.eclipse.jgit.lib.Repository} object.
* @param outputStream
* The output stream, or {@code null} to use {@code System.out}
* @param errorStream
* The error stream, or {@code null} to use {@code System.err}
* @return The pre-commit hook for the given repository.
* @since 5.6
*/
public static PostCommitHook postCommit(Repository repo,
PrintStream outputStream, PrintStream errorStream) {
return new PostCommitHook(repo, outputStream, errorStream);
}
/**
* Create commit-msg hook for the given repository with the default error
* stream
*
* @param repo
* a {@link org.eclipse.jgit.lib.Repository} object.
* @param outputStream
* The output stream, or {@code null} to use {@code System.out}
* @return The commit-msg hook for the given repository.
*/
public static CommitMsgHook commitMsg(Repository repo,
PrintStream outputStream) {
return new CommitMsgHook(repo, outputStream);
}
/**
* Create commit-msg hook for the given repository
*
* @param repo
* a {@link org.eclipse.jgit.lib.Repository} object.
* @param outputStream
* The output stream, or {@code null} to use {@code System.out}
* @param errorStream
* The error stream, or {@code null} to use {@code System.err}
* @return The pre-commit hook for the given repository.
* @since 5.6
*/
public static CommitMsgHook commitMsg(Repository repo,
PrintStream outputStream, PrintStream errorStream) {
return new CommitMsgHook(repo, outputStream, errorStream);
}
/**
* Create pre-push hook for the given repository with the default error
* stream
*
* @param repo
* a {@link org.eclipse.jgit.lib.Repository} object.
* @param outputStream
* The output stream, or {@code null} to use {@code System.out}
* @return The pre-push hook for the given repository.
* @since 4.2
*/
public static PrePushHook prePush(Repository repo, PrintStream outputStream) {
if (LfsFactory.getInstance().isAvailable()) {
PrePushHook hook = LfsFactory.getInstance().getPrePushHook(repo,
outputStream);
if (hook != null) {
if (hook.isNativeHookPresent()) {
PrintStream ps = outputStream;
if (ps == null) {
ps = System.out;
}
ps.println(MessageFormat
.format(JGitText.get().lfsHookConflict, repo));
}
return hook;
}
}
return new PrePushHook(repo, outputStream);
}
/**
* Create pre-push hook for the given repository
*
* @param repo
* a {@link org.eclipse.jgit.lib.Repository} object.
* @param outputStream
* The output stream, or {@code null} to use {@code System.out}
* @param errorStream
* The error stream, or {@code null} to use {@code System.err}
* @return The pre-push hook for the given repository.
* @since 5.6
*/
public static PrePushHook prePush(Repository repo, PrintStream outputStream,
PrintStream errorStream) {
if (LfsFactory.getInstance().isAvailable()) {
PrePushHook hook = LfsFactory.getInstance().getPrePushHook(repo,
outputStream, errorStream);
if (hook != null) {
if (hook.isNativeHookPresent()) {
PrintStream ps = outputStream;
if (ps == null) {
ps = System.out;
}
ps.println(MessageFormat
.format(JGitText.get().lfsHookConflict, repo));
}
return hook;
}
}
return new PrePushHook(repo, outputStream, errorStream);
}
}