diff --git a/ndiff/ndiff b/ndiff/ndiff index 0e040c3df..1bcfdffa3 100755 --- a/ndiff/ndiff +++ b/ndiff/ndiff @@ -585,6 +585,19 @@ class HostDiff(object): for i in range(i1, i2): print >> f, " %s" % host_a.os[i] + table = Table(u"*") + for sr_diff in self.script_result_diffs: + sr_diff.append_to_port_table(table) + if len(table) > 0: + print >> f + if len(host_b.script_results) == 0: + print >> f, u"-Host script results:" + elif len(host_a.script_results) == 0: + print >> f, u"+Host script results:" + else: + print >> f, u" Host script results:" + print >> f, table + def to_dom_fragment(self, document): host_a = self.host_a host_b = self.host_b @@ -763,7 +776,7 @@ class PortDiff(object): self.port_b.service.name_string(), self.port_b.service.version_string()] if a_columns == b_columns: - if verbose: + if verbose or self.script_result_diffs > 0: table.append([u" "] + a_columns) else: if not host_a.is_extraports(self.port_a.state): @@ -771,6 +784,9 @@ class PortDiff(object): if not host_b.is_extraports(self.port_b.state): table.append([u"+"] + b_columns) + for sr_diff in self.script_result_diffs: + sr_diff.append_to_port_table(table) + def to_dom_fragment(self, document): frag = document.createDocumentFragment() portdiff_elem = document.createElement(u"portdiff") @@ -839,6 +855,28 @@ class ScriptResultDiff(object): return diffs diff_lists = staticmethod(diff_lists) + # Script result diffs are appended to a port table rather than being printed + # directly, so append_to_port_table exists instead of print_text. + def append_to_port_table(self, table): + a_lines = [] + b_lines = [] + if self.sr_a is not None: + a_lines = self.sr_a.get_lines() + if self.sr_b is not None: + b_lines = self.sr_b.get_lines() + if a_lines != b_lines or verbose: + diffs = difflib.SequenceMatcher(None, a_lines, b_lines) + for op, i1, i2, j1, j2 in diffs.get_opcodes(): + if op == "replace" or op == "delete": + for k in range(i1, i2): + table.append_raw(u"-" + a_lines[k]) + if op == "replace" or op == "insert": + for k in range(j1, j2): + table.append_raw(u"+" + b_lines[k]) + if op == "equal": + for k in range(i1, i2): + table.append_raw(u" " + a_lines[k]) + def to_dom_fragment(self, document): frag = document.createDocumentFragment() if self.sr_a is not None and self.sr_b is not None and self.sr_a == self.sr_b: