IDEA-78280 (Grails: 'Evaluate Expression' broken after controller reload)
[idea/community.git] / plugins / git4idea / src / git4idea / config / GitVersionSpecialty.java
1 /*
2  * Copyright 2000-2010 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package git4idea.config;
17
18 import org.jetbrains.annotations.NotNull;
19
20 /**
21  * <p>
22  * This enum stores the collection of bugs and features of different versions of Git.
23  * To check if the bug exists in current version call {@link #existsIn(GitVersion)}.
24  * </p>
25  * <p>
26  * Usage example: CYGWIN Git has a bug - not understanding stash names without quotes:
27  * <pre><code>
28  * String stashName = "stash@{0}";
29  * if (GitVersionSpecialty.NEEDS_QUOTES_IN_STASH_NAME.existsIn(myVcs.getVersion()) {
30  *   stashName = "\"stash@{0}\"";
31  * }
32  * </code></pre>
33  * </p>
34  * @author Kirill Likhodedov
35  */
36 public enum GitVersionSpecialty {
37
38   /**
39    * This version of git has "--progress" parameter in long-going commands (such as clone or fetch).
40    * Note that while pull, clone and fetch received the parameter since 1.7.1.1,
41    * some other commands (like merge) might have achieved it later.
42    */
43   ABLE_TO_USE_PROGRESS {
44     @Override
45     public boolean existsIn(@NotNull GitVersion version) {
46       return version.isLaterOrEqual(new GitVersion(1, 7, 1, 1));
47     }
48   },
49
50   DOESNT_GET_PARAMETERS_FROM_RUNNERW {
51     @Override
52     public boolean existsIn(@NotNull GitVersion version) {
53       return version.getType().equals(GitVersion.Type.CYGWIN);
54     }
55   },
56
57   NEEDS_QUOTES_IN_STASH_NAME {
58     @Override
59     public boolean existsIn(@NotNull GitVersion version) {
60       return version.getType().equals(GitVersion.Type.CYGWIN);
61     }
62   },
63
64   STARTED_USING_RAW_BODY_IN_FORMAT {
65     @Override
66     public boolean existsIn(@NotNull GitVersion version) {
67       return version.isLaterOrEqual(new GitVersion(1, 7, 2, 0));
68     }
69   },
70
71   /**
72    * Git understands <code>'git status --porcelain'</code>.
73    * Since 1.7.0.
74    */
75   KNOWS_STATUS_PORCELAIN {
76     @Override
77     public boolean existsIn(@NotNull GitVersion
78     version) {
79       return version.isLaterOrEqual(new GitVersion(1, 7, 0, 0));
80     }
81   };
82
83   public abstract boolean existsIn(@NotNull GitVersion version);
84
85 }