This file is indexed.

/usr/share/pyshared/Codeville/diff.py is in codeville 0.8.0-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# Written by Ross Cohen
# see LICENSE.txt for license information

from lcsmatch import find_matches

def standard_diff(lines1, lines2):
    matches = find_matches(lines1, lines2)
    if len(matches) == 0 or matches[0][0] != 0 or matches[0][1] != 0:
        matches.insert(0, (0, 0, 0))
    if     matches[-1][0]+matches[-1][2] != len(lines1) or \
           matches[-1][1]+matches[-1][2] != len(lines2):
        matches.append((len(lines1), len(lines2), 0))

    text = []
    i = 0
    j = 0
    for i2, j2, l in matches:
        if i2 == i and j2 == j:
            i += l
            j += l
            continue
        if i2 == i:
            at = str(i)
        elif i2 == i + 1:
            at = str(i2)
        else:
            at = "%d,%d" % (i+1, i2)
        if j2 == j:
            bt = str(j)
        elif j2 == j + 1:
            bt = str(j2)
        else:
            bt = "%d,%d" % (j+1, j2)
        if i2 > i:
            if j2 > j:
                text.extend([at, 'c', bt, "\n"])
            else:
                text.extend([at, 'd', bt, "\n"])
        else:
            text.extend([at, 'a', bt, "\n"])
        for i in xrange(i, i2):
            text.extend(["< ", lines1[i], "\n"])
        if i2 > i and j2 > j:
            text.append("---\n")
        for j in xrange(j, j2):
            text.extend(["> ", lines2[j], "\n"])
        i = i2 + l
        j = j2 + l

    return ''.join(text)


def unified_diff(lines1, lines2):
    matches = find_matches(lines1, lines2)
    if     len(matches) == 0 or \
           matches[-1][0]+matches[-1][2] != len(lines1) or \
           matches[-1][1]+matches[-1][2] != len(lines2):
        matches.append((len(lines1), len(lines2), 0))

    text = []
    if matches[0][:2] == (0, 0):
        line = line2 = max(matches[0][2] - 3, 0)
        length = min(matches[0][2], 3)
        m = 1
    else:
        line, line2 = -1, 0
        length = 0
        m = 0
    while m < len(matches):
        # capture as much as possible under this header
        m_end = m
        while True:
            line_end, line2_end, length_end = matches[m_end]
            if length_end > 6 or m_end + 1 == len(matches):
                break
            m_end += 1
        length_end = min(length_end, 3)

        # print the diff header for all the hunks we can cover
        lfudge = max(0, line)
        header = "@@ -%d,%d +%d,%d @@\n" % \
                 (lfudge + 1,  line_end - lfudge + length_end,
                  line2 + 1, line2_end - line2 + length_end)
        text.append(header)

        # print out all the covered hunks with context
        for m in xrange(m, m_end+1):
            # fill out the previous context
            for line in xrange(line, line+length):
                text.append(' ' + lines1[line] + "\n")
            line2 += length - 1
            s1, s2, length = matches[m]
            # print the removed and added lines
            for line in xrange(line+1, s1):
                text.append('-' + lines1[line] + "\n")
            for line2 in xrange(line2+1, s2):
                text.append('+' + lines2[line2] + "\n")
            line  += 1
            line2 += 1

        len_full = length
        length = min(3, length)
        # print the trailing context
        for i in xrange(line, line + length):
            text.append(' ' + lines1[i] + "\n")

        # setup stuff for the next iteration
        line  = s1 + len_full - length
        line2 = s2 + len_full - length
        m += 1

    return ''.join(text)

if __name__ == '__main__':
    from sys import argv, exit
    from getopt import gnu_getopt, GetoptError

    try:
        optlist, args = gnu_getopt(argv, 'u')
    except GetoptError, msg:
        print "Unknown option \"%s\"" % (msg.args[0],)
        exit(1)

    if len(args) != 3:
        print "Usage: %s [-u] file1 file2" % (args[0],)
        exit(1)

    diff_func = standard_diff
    for opt, arg in optlist:
        if opt == '-u':
            diff_func = unified_diff

    h = open(args[1], 'rb')
    pre_lines = [line[:-1] for line in h.readlines()]
    h.close()

    h = open(args[2], 'rb')
    post_lines = [line[:-1] for line in h.readlines()]
    h.close()

    print diff_func(pre_lines, post_lines)