This file is indexed.

/usr/bin/xx-hg-merge is in xxdiff-scripts 1:4.0+hg453+dfsg-2.

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

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
#!/usr/bin/python
"""
A wrapper script that implements an interface compatible with hgmerge.
Basically, it needs to exit with 0 on success, and to place the results of the
merge in the 'left' file.

Note [2013-08-04]: this script is probably not necessary anymore.
You can use the following Mercurial configuration instead:

  [merge-tools]
  xx-encrypted =
  xx-encrypted.priority = 100
  xx-encrypted.premerge = False
  xx-encrypted.args = $local $base $other -o $output
  xxdiff =
  xxdiff.priority = 100
  xxdiff.premerge = False
  xxdiff.args = --decision $local $base $other -M $output

  [merge-patterns]
  **.asc = xx-encrypted
  **.gpg = xx-encrypted
  ** = xxdiff

"""

# stdlib imports
import sys, os, shutil, re

# xxdiff imports
from xxdiff import invoke
from xxdiff.scripts import encrypted


def main():
    import optparse
    parser = optparse.OptionParser(__doc__.strip())
    invoke.options_graft(parser)

    parser.add_option('-g', '--gpg', default="gpg",
                      help="Specify path to gpg program to use.")

    parser.add_option('-r', '--recipient', action='store',
                      help="Encrypt for user id name.")

    parser.add_option('-A', '--dont-armor', action='store_true',
                      help="Create output file in binary format.")

    opts, args = parser.parse_args()
    invoke.options_validate(opts, parser)

    if len(args) != 3:
        parser.error("You need to provide 3 arguments.")
    fl, fb, fr = args

    # Invoke xxdiff.
    mergedf = None
    if not re.match('.*\\.asc$', fl):
        decision, mergedf, __retcode = invoke.xxdiff_decision(
            opts,
            '--title1=Current',
            '--title2=Ancestor',
            '--title3=Merging',
            fl, fb, fr)
        merged_name = mergedf.name
    else:
        merged_name = '%s.merged' % fl
        textlist = [open(n).read() for n in (fl, fb, fr)]
        decision = encrypted.diff_encrypted(textlist, opts, merged_name)

    # If the user exited normally, copy the merged results to the left file
    # (because that's what the Mercurial merge.py code expects).
    if decision != 'NODECISION':
        shutil.copyfile(merged_name, fl)
        ret = 0
    else:
        ret = 1

    if mergedf is not None:
        mergedf.close()
    try:
        os.remove(merged_name)
    except (IOError, OSError):
        pass

    return ret


if __name__ == '__main__':
    sys.exit(main())


# From mercurial.merge, this program is invoked like tihs::
#
#     r = util.system('%s "%s" "%s" "%s"' % (cmd, a, b, c), cwd=repo.root,
#                     environ={'HG_FILE': fd,
#                              'HG_MY_NODE': str(wctx.parents()[0]),
#                              'HG_OTHER_NODE': str(mctx),
#                              'HG_MY_ISLINK': fcm.islink(),
#                              'HG_OTHER_ISLINK': fco.islink(),
#                              'HG_BASE_ISLINK': fca.islink(),})
#
# The following environment variables are defined by the caller script:
#
#   HG_FILE: the destination filename
#   HG_MY_NODE: ?
#   HG_OTHER_NODE: ?
#   HG_MY_ISLINK: ?
#   HG_OTHER_ISLINK: ?
#   HG_BASE_ISLINK: ?