OSDN Git Service

Update RevisionGraph to 15570
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / RevisionGraph / ExactCopyFroms.cpp
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-2008 - TortoiseSVN\r
4 \r
5 // This program is free software; you can redistribute it and/or\r
6 // modify it under the terms of the GNU General Public License\r
7 // as published by the Free Software Foundation; either version 2\r
8 // of the License, or (at your option) any later version.\r
9 \r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 \r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, write to the Free Software Foundation,\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
18 //\r
19 #include "StdAfx.h"\r
20 #include "ExactCopyFroms.h"\r
21 #include "VisibleGraphNode.h"\r
22 \r
23 // construction\r
24 \r
25 CExactCopyFroms::CExactCopyFroms (CRevisionGraphOptionList& list)\r
26     : inherited (list)\r
27 {\r
28 }\r
29 \r
30 // implement IRevisionGraphOption: This option must always be applied.\r
31 \r
32 bool CExactCopyFroms::IsActive() const\r
33 {\r
34     return true;\r
35 }\r
36 \r
37 // implement IModificationOption:\r
38 // remove the pure copy sources\r
39 \r
40 void CExactCopyFroms::Apply (CVisibleGraph* graph, CVisibleGraphNode* node)\r
41 {\r
42     // remove node, if it is neither "M", "A", "D" nor "R"\r
43 \r
44     if (node->GetClassification().Matches (0, CNodeClassification::IS_OPERATION_MASK))\r
45     {\r
46         // is this node still necessary?\r
47 \r
48         CVisibleGraphNode* next = node->GetNext();\r
49 \r
50         bool isCopySource =    (node->GetFirstTag() != NULL)\r
51                             || (node->GetFirstCopyTarget() != NULL)\r
52                             || (   (next != NULL) \r
53                                 && (next->GetClassification().Is \r
54                                         (CNodeClassification::IS_RENAMED)));\r
55 \r
56         // remove it, if it is either no longer necessary or not wanted at all\r
57 \r
58         if (!IsSelected() || !isCopySource)\r
59             node->DropNode (graph, true);\r
60     }\r
61 }\r