1 /*
2 * Copyright (C) 2015 Obeo.
3 * and other copyright owners as documented in the project's IP log.
4 *
5 * This program and the accompanying materials are made available
6 * under the terms of the Eclipse Distribution License v1.0 which
7 * accompanies this distribution, is reproduced below, and is
8 * available at http://www.eclipse.org/org/documents/edl-v10.php
9 *
10 * All rights reserved.
11 *
12 * Redistribution and use in source and binary forms, with or
13 * without modification, are permitted provided that the following
14 * conditions are met:
15 *
16 * - Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 *
19 * - Redistributions in binary form must reproduce the above
20 * copyright notice, this list of conditions and the following
21 * disclaimer in the documentation and/or other materials provided
22 * with the distribution.
23 *
24 * - Neither the name of the Eclipse Foundation, Inc. nor the
25 * names of its contributors may be used to endorse or promote
26 * products derived from this software without specific prior
27 * written permission.
28 *
29 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
30 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
31 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
32 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
33 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
34 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
36 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
37 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
38 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
40 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
41 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42 */
43 package org.eclipse.jgit.hooks;
44
45 import java.io.PrintStream;
46 import java.text.MessageFormat;
47
48 import org.eclipse.jgit.internal.JGitText;
49 import org.eclipse.jgit.lib.Repository;
50 import org.eclipse.jgit.util.LfsFactory;
51
52 /**
53 * Factory class for instantiating supported hooks.
54 *
55 * @since 4.0
56 */
57 public class Hooks {
58
59 /**
60 * Create pre-commit hook for the given repository
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 pre-commit hook for the given repository.
67 */
68 public static PreCommitHook preCommit(Repository repo,
69 PrintStream outputStream) {
70 return new PreCommitHook(repo, outputStream);
71 }
72
73 /**
74 * Create post-commit hook for the given repository
75 *
76 * @param repo
77 * a {@link org.eclipse.jgit.lib.Repository} object.
78 * @param outputStream
79 * The output stream, or {@code null} to use {@code System.out}
80 * @return The post-commit hook for the given repository.
81 * @since 4.5
82 */
83 public static PostCommitHook postCommit(Repository repo,
84 PrintStream outputStream) {
85 return new PostCommitHook(repo, outputStream);
86 }
87
88 /**
89 * Create commit-msg hook for the given repository
90 *
91 * @param repo
92 * a {@link org.eclipse.jgit.lib.Repository} object.
93 * @param outputStream
94 * The output stream, or {@code null} to use {@code System.out}
95 * @return The commit-msg hook for the given repository.
96 */
97 public static CommitMsgHook commitMsg(Repository repo,
98 PrintStream outputStream) {
99 return new CommitMsgHook(repo, outputStream);
100 }
101
102 /**
103 * Create pre-push hook for the given repository
104 *
105 * @param repo
106 * a {@link org.eclipse.jgit.lib.Repository} object.
107 * @param outputStream
108 * The output stream, or {@code null} to use {@code System.out}
109 * @return The pre-push hook for the given repository.
110 * @since 4.2
111 */
112 public static PrePushHook prePush(Repository repo, PrintStream outputStream) {
113 if (LfsFactory.getInstance().isAvailable()) {
114 PrePushHook hook = LfsFactory.getInstance().getPrePushHook(repo,
115 outputStream);
116 if (hook != null) {
117 if (hook.isNativeHookPresent()) {
118 PrintStream ps = outputStream;
119 if (ps == null) {
120 ps = System.out;
121 }
122 ps.println(MessageFormat
123 .format(JGitText.get().lfsHookConflict, repo));
124 }
125 return hook;
126 }
127 }
128 return new PrePushHook(repo, outputStream);
129 }
130 }