-
Notifications
You must be signed in to change notification settings - Fork 1
/
GitMergeLeftovers.lua
124 lines (96 loc) · 4 KB
/
GitMergeLeftovers.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
-- GitMergeLeftovers
-- Copyright (C) 2017 Pavel Tisnovsky
-- This program is free software: you can redistribute it and/or modify it
-- under the terms of the GNU General Public License as published by the
-- Free Software Foundation, version 3 of the License.
--
-- This program is distributed in the hope that it will be useful, but
-- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTA-
-- BILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-- License for more details.
--
-- You should have received a copy of the GNU General Public License along
-- with this program. If not, see <http://www.gnu.org/licenses/>.
GitMergeLeftovers = {
metadata = {
description = "Verify that the book does not contain any Git Merge Leftovers.",
authors = "Pavel Tisnovsky",
emails = "ptisnovs@redhat.com",
changed = "2017-08-08",
tags = {"Release"}
},
xmlObj = nil,
pubObj = nil,
docObj = nil,
getReadableText = nil,
language = "en-US",
requires = {"curl", "xmllint", "xmlstarlet"},
}
function GitMergeLeftovers.setUp()
dofile(getScriptDirectory() .. "lib/xml.lua")
dofile(getScriptDirectory() .. "lib/publican.lua")
dofile(getScriptDirectory() .. "lib/docbook.lua")
dofile(getScriptDirectory() .. "lib/sql.lua")
-- Create publican object.
GitMergeLeftovers.pubObj = publican.create("publican.cfg")
-- Create xml object.
GitMergeLeftovers.xmlObj = xml.create(GitMergeLeftovers.pubObj:findMainFile())
-- Create docbook object.
GitMergeLeftovers.docObj = docbook.create(GitMergeLeftovers.pubObj:findMainFile())
-- Get readable text.
GitMergeLeftovers.readableText = GitMergeLeftovers.docObj:getReadableText()
-- Get language code from this book.
local language = GitMergeLeftovers.pubObj:getOption("xml_lang")
-- Default language is en-US:
if not language then
language = "en-US"
end
-- Get list of xml files.
GitMergeLeftovers.fileList = GitMergeLeftovers.getFileList(GitMergeLeftovers.pubObj:findMainFile(), language)
end
function GitMergeLeftovers.testGitLeftovers()
-- Go through all files and check every file.
for _, filePath in ipairs(GitMergeLeftovers.fileList) do
pass("Checking **" .. filePath .. "**.")
local fileObj = docbook.create(filePath)
-- Get readable part of the current file.
local readableParts = fileObj:getReadableText(0)
-- Perform the test only if readable parts are not nil.
if readableParts then
for _, line in ipairs(readableParts) do
if line:find("<<<<<<<") or line:find(">>>>>>>") then
fail("Possible merge conflict leftover has been found: **" .. line .. "**")
end
end
end
end
end
function GitMergeLeftovers.getFileList(fileN, language)
-- Handle situtaion when xml file doesn't exist.
if not path.file_exists(fileN) then
return nil
end
-- create xml object for document main file and turn off the xincludes.
local xmlObj = xml.create(fileN, 0)
local wholeFileList = {}
table.insert(wholeFileList, fileN)
-- Get content of href attribute from the main file.
local fileList = xmlObj:parseXml("//newnamespace:include/@href", "http://www.w3.org/2001/XInclude")
-- If there is no other includes in the current file then return list with only current file.
if not fileList then
return wholeFileList
end
-- Append en-US directory for each file name and store it back to the table.
for i, fileName in ipairs(fileList) do
--print("expand", fileName)
if not fileName:match("^" .. language) then
fileList[i] = language .. "/" .. fileName
end
local nextFiles = TestWritingStyle.getFileList(fileList[i], language)
if nextFiles then
wholeFileList = table.appendTables(wholeFileList, nextFiles)
end
end
-- Return the result table.
return wholeFileList
end