1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2009, 2011-2014, 2017 - TortoiseGit
4 // Copyright (C) 2003-2008,2011-2012 - TortoiseSVN
6 // This program is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU General Public License
8 // as published by the Free Software Foundation; either version 2
9 // of the License, or (at your option) any later version.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software Foundation,
18 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 #define BUGTRAQPROPNAME_LABEL L"bugtraq.label"
25 #define BUGTRAQPROPNAME_MESSAGE L"bugtraq.message"
26 #define BUGTRAQPROPNAME_NUMBER L"bugtraq.number"
27 #define BUGTRAQPROPNAME_LOGREGEX L"bugtraq.logregex"
28 #define BUGTRAQPROPNAME_URL L"bugtraq.url"
29 #define BUGTRAQPROPNAME_WARNIFNOISSUE L"bugtraq.warnifnoissue"
30 #define BUGTRAQPROPNAME_APPEND L"bugtraq.append"
31 #define BUGTRAQPROPNAME_PROVIDERUUID L"bugtraq.provideruuid"
32 #define BUGTRAQPROPNAME_PROVIDERUUID64 L"bugtraq.provideruuid64"
33 #define BUGTRAQPROPNAME_PROVIDERPARAMS L"bugtraq.providerparams"
35 #define PROJECTPROPNAME_LOGWIDTHLINE L"tgit.logwidthmarker"
36 #define PROJECTPROPNAME_LOGMINSIZE L"tgit.logminsize"
37 #define PROJECTPROPNAME_LOGFILELISTLANG L"tsvn.logfilelistenglish"
38 #define PROJECTPROPNAME_PROJECTLANGUAGE L"tgit.projectlanguage"
39 #define PROJECTPROPNAME_WARNNOSIGNEDOFFBY L"tgit.warnnosignedoffby"
40 #define PROJECTPROPNAME_ICON L"tgit.icon"
42 #define PROJECTPROPNAME_WEBVIEWER_REV L"webviewer.revision"
43 #define PROJECTPROPNAME_WEBVIEWER_PATHREV L"webviewer.pathrevision"
46 * \ingroup TortoiseProc
47 * Provides methods for retrieving information about bug/issue trackers
48 * associated with a git repository/working copy and other project
51 class ProjectProperties
54 ProjectProperties(void);
57 * Reads the properties from the current working tree
63 * Searches for the BugID inside a log message. If one is found,
64 * the method returns TRUE. The rich edit control is used to set
65 * the CFE_LINK effect on the BugID's.
66 * \param msg the log message
67 * \param pWnd Pointer to a rich edit control
70 std::vector
<CHARRANGE
> FindBugIDPositions(const CString
& msg
);
72 BOOL
FindBugID(const CString
& msg
, CWnd
* pWnd
);
74 CString
FindBugID(const CString
& msg
);
75 std::set
<CString
> FindBugIDs(const CString
& msg
);
78 * Check whether calling \ref FindBugID or \ref FindBugIDPositions
79 * is worthwhile. If the result is @a false, those functions would
80 * return empty strings or sets, respectively.
82 bool MightContainABugID();
85 * Searches for the BugID inside a log message. If one is found,
86 * that BugID is returned. If none is found, an empty string is returned.
87 * The \c msg is trimmed off the BugID.
89 CString
GetBugIDFromLog(CString
& msg
);
92 * Checks if the bug ID is valid. If bugtraq:number is 'true', then the
93 * functions checks if the bug ID doesn't contain any non-number chars in it.
95 BOOL
CheckBugID(const CString
& sID
);
98 * Checks if the log message \c sMessage contains a bug ID. This is done by
99 * using the bugtraq:checkre property.
101 BOOL
HasBugID(const CString
& sMessage
);
104 * Returns the URL pointing to the Issue in the issue tracker. The URL is
105 * created from the bugtraq:url property and the BugID found in the log message.
106 * \param msg the BugID extracted from the log message
108 CString
GetBugIDUrl(const CString
& sBugID
);
110 /** replaces bNumer: a regular expression string to check the validity of
111 * the entered bug ID. */
112 const CString
& GetCheckRe() const {return sCheckRe
;}
113 void SetCheckRe(const CString
& s
) {sCheckRe
= s
;regExNeedUpdate
=true;AutoUpdateRegex();}
115 /** used to extract the bug ID from the string matched by sCheckRe */
116 const CString
& GetBugIDRe() const {return sBugIDRe
;}
117 void SetBugIDRe(const CString
& s
) {sBugIDRe
= s
;regExNeedUpdate
=true;AutoUpdateRegex();}
120 const CString
& GetProviderUUID() const { return (sProviderUuid64
.IsEmpty() ? sProviderUuid
: sProviderUuid64
); }
122 const CString
& GetProviderUUID() const { return (sProviderUuid
.IsEmpty() ? sProviderUuid64
: sProviderUuid
); }
126 /** The label to show in the commit dialog where the issue number/bug id
127 * is entered. Example: "Bug-ID: " or "Issue-No.:". Default is "Bug-ID :" */
130 /** The message string to add below the log message the user entered.
131 * It must contain the string "%BUGID%" which gets replaced by the client
132 * with the issue number / bug id the user entered. */
135 /** If this is set, then the bug-id / issue number must be a number, no text */
138 /** replaces bNumer: a regular expression string to check the validity of
139 * the entered bug ID. */
142 /** used to extract the bug ID from the string matched by sCheckRe */
145 /** The url pointing to the issue tracker. If the url contains the string
146 * "%BUGID% the client has to replace it with the issue number / bug id
147 * the user entered. */
150 /** If set to TRUE, show a warning dialog if the user forgot to enter
151 * an issue number in the commit dialog. */
154 /** If set to FALSE, then the bug tracking entry is inserted at the top of the
155 log message instead of at the bottom. Default is TRUE */
158 /** the parameters passed to the COM bugtraq provider which implements the
159 IBugTraqProvider interface */
160 CString sProviderParams
;
162 /** The number of chars the width marker should be shown at. If the property
163 * is not set, then this value is 80 by default. */
166 /** Minimum size a log message must have in chars */
169 /** TRUE if the file list to be inserted in the commit dialog should be in
170 * English and not in the localized language. Default is TRUE */
171 BOOL bFileListInEnglish
;
173 /** The language identifier this project uses for log messages. */
174 LONG lProjectLanguage
;
176 /** The url pointing to the web viewer. The string %REVISION% is replaced
177 * with the revision number, "HEAD", or a date */
178 CString sWebViewerRev
;
180 /** The url pointing to the web viewer. The string %REVISION% is replaced
181 * with the revision number, "HEAD", or a date. The string %PATH% is replaced
182 * with the path relative to the repository root, e.g. "/trunk/src/file" */
183 CString sWebViewerPathRev
;
185 BOOL bWarnNoSignedOffBy
;
189 * A regex string to extract revisions from a log message.
191 CString sLogRevRegex
;
193 /** the COM uuid of the bugtraq provider which implements the IBugTraqProvider
195 CString sProviderUuid
;
196 CString sProviderUuid64
;
200 * Constructing regex objects is expensive. Therefore, cache them here.
202 void AutoUpdateRegex();
204 bool regExNeedUpdate
;
205 std::tr1::wregex regCheck
;
206 std::tr1::wregex regBugID
;
208 int nBugIdPos
; ///< result of sMessage.Find(L"%BUGID%");
210 #ifdef GTEST_INCLUDE_GTEST_GTEST_H_
211 FRIEND_TEST(ProjectPropertiesTest
, ParseBugIDs
);