View Javadoc
1   /*
2    * Copyright (C) 2015 Obeo. and others
3    *
4    * This program and the accompanying materials are made available under the
5    * terms of the Eclipse Distribution License v. 1.0 which is available at
6    * https://www.eclipse.org/org/documents/edl-v10.php.
7    *
8    * SPDX-License-Identifier: BSD-3-Clause
9    */
10  package org.eclipse.jgit.hooks;
11  
12  import java.io.PrintStream;
13  import java.text.MessageFormat;
14  
15  import org.eclipse.jgit.internal.JGitText;
16  import org.eclipse.jgit.lib.Repository;
17  import org.eclipse.jgit.util.LfsFactory;
18  
19  /**
20   * Factory class for instantiating supported hooks.
21   *
22   * @since 4.0
23   */
24  public class Hooks {
25  
26  	/**
27  	 * Create pre-commit hook for the given repository with the default error
28  	 * stream
29  	 *
30  	 * @param repo
31  	 *            a {@link org.eclipse.jgit.lib.Repository} object.
32  	 * @param outputStream
33  	 *            The output stream, or {@code null} to use {@code System.out}
34  	 * @return The pre-commit hook for the given repository.
35  	 */
36  	public static PreCommitHook preCommit(Repository repo,
37  			PrintStream outputStream) {
38  		return new PreCommitHook(repo, outputStream);
39  	}
40  
41  	/**
42  	 * Create pre-commit hook for the given repository
43  	 *
44  	 * @param repo
45  	 *            a {@link org.eclipse.jgit.lib.Repository} object.
46  	 * @param outputStream
47  	 *            The output stream, or {@code null} to use {@code System.out}
48  	 * @param errorStream
49  	 *            The error stream, or {@code null} to use {@code System.err}
50  	 * @return The pre-commit hook for the given repository.
51  	 * @since 5.6
52  	 */
53  	public static PreCommitHook preCommit(Repository repo,
54  			PrintStream outputStream, PrintStream errorStream) {
55  		return new PreCommitHook(repo, outputStream, errorStream);
56  	}
57  
58  	/**
59  	 * Create post-commit hook for the given repository with the default error
60  	 * stream
61  	 *
62  	 * @param repo
63  	 *            a {@link org.eclipse.jgit.lib.Repository} object.
64  	 * @param outputStream
65  	 *            The output stream, or {@code null} to use {@code System.out}
66  	 * @return The post-commit hook for the given repository.
67  	 * @since 4.5
68  	 */
69  	public static PostCommitHook postCommit(Repository repo,
70  			PrintStream outputStream) {
71  		return new PostCommitHook(repo, outputStream);
72  	}
73  
74  	/**
75  	 * Create post-commit hook for the given repository
76  	 *
77  	 * @param repo
78  	 *            a {@link org.eclipse.jgit.lib.Repository} object.
79  	 * @param outputStream
80  	 *            The output stream, or {@code null} to use {@code System.out}
81  	 * @param errorStream
82  	 *            The error stream, or {@code null} to use {@code System.err}
83  	 * @return The pre-commit hook for the given repository.
84  	 * @since 5.6
85  	 */
86  	public static PostCommitHook postCommit(Repository repo,
87  			PrintStream outputStream, PrintStream errorStream) {
88  		return new PostCommitHook(repo, outputStream, errorStream);
89  	}
90  
91  	/**
92  	 * Create commit-msg hook for the given repository with the default error
93  	 * stream
94  	 *
95  	 * @param repo
96  	 *            a {@link org.eclipse.jgit.lib.Repository} object.
97  	 * @param outputStream
98  	 *            The output stream, or {@code null} to use {@code System.out}
99  	 * @return The commit-msg hook for the given repository.
100 	 */
101 	public static CommitMsgHook commitMsg(Repository repo,
102 			PrintStream outputStream) {
103 		return new CommitMsgHook(repo, outputStream);
104 	}
105 
106 	/**
107 	 * Create commit-msg hook for the given repository
108 	 *
109 	 * @param repo
110 	 *            a {@link org.eclipse.jgit.lib.Repository} object.
111 	 * @param outputStream
112 	 *            The output stream, or {@code null} to use {@code System.out}
113 	 * @param errorStream
114 	 *            The error stream, or {@code null} to use {@code System.err}
115 	 * @return The pre-commit hook for the given repository.
116 	 * @since 5.6
117 	 */
118 	public static CommitMsgHook commitMsg(Repository repo,
119 			PrintStream outputStream, PrintStream errorStream) {
120 		return new CommitMsgHook(repo, outputStream, errorStream);
121 	}
122 
123 	/**
124 	 * Create pre-push hook for the given repository with the default error
125 	 * stream
126 	 *
127 	 * @param repo
128 	 *            a {@link org.eclipse.jgit.lib.Repository} object.
129 	 * @param outputStream
130 	 *            The output stream, or {@code null} to use {@code System.out}
131 	 * @return The pre-push hook for the given repository.
132 	 * @since 4.2
133 	 */
134 	public static PrePushHook prePush(Repository repo, PrintStream outputStream) {
135 		if (LfsFactory.getInstance().isAvailable()) {
136 			PrePushHook hook = LfsFactory.getInstance().getPrePushHook(repo,
137 					outputStream);
138 			if (hook != null) {
139 				if (hook.isNativeHookPresent()) {
140 					PrintStream ps = outputStream;
141 					if (ps == null) {
142 						ps = System.out;
143 					}
144 					ps.println(MessageFormat
145 							.format(JGitText.get().lfsHookConflict, repo));
146 				}
147 				return hook;
148 			}
149 		}
150 		return new PrePushHook(repo, outputStream);
151 	}
152 
153 	/**
154 	 * Create pre-push hook for the given repository
155 	 *
156 	 * @param repo
157 	 *            a {@link org.eclipse.jgit.lib.Repository} object.
158 	 * @param outputStream
159 	 *            The output stream, or {@code null} to use {@code System.out}
160 	 * @param errorStream
161 	 *            The error stream, or {@code null} to use {@code System.err}
162 	 * @return The pre-push hook for the given repository.
163 	 * @since 5.6
164 	 */
165 	public static PrePushHook prePush(Repository repo, PrintStream outputStream,
166 			PrintStream errorStream) {
167 		if (LfsFactory.getInstance().isAvailable()) {
168 			PrePushHook hook = LfsFactory.getInstance().getPrePushHook(repo,
169 					outputStream, errorStream);
170 			if (hook != null) {
171 				if (hook.isNativeHookPresent()) {
172 					PrintStream ps = outputStream;
173 					if (ps == null) {
174 						ps = System.out;
175 					}
176 					ps.println(MessageFormat
177 							.format(JGitText.get().lfsHookConflict, repo));
178 				}
179 				return hook;
180 			}
181 		}
182 		return new PrePushHook(repo, outputStream, errorStream);
183 	}
184 }