9f9230833b50b8271840dc2c12bd1e94d9df7d12Alexander Pyhalov#!@PYTHON@
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson#
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# This program is free software; you can redistribute it and/or modify
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# it under the terms of the GNU General Public License version 2
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# as published by the Free Software Foundation.
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson#
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# This program is distributed in the hope that it will be useful,
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# but WITHOUT ANY WARRANTY; without even the implied warranty of
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# GNU General Public License for more details.
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson#
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# You should have received a copy of the GNU General Public License
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# along with this program; if not, write to the Free Software
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson#
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson#
87ab362234f761757d96ff1a758ab5c3bd85ed83Richard Lowe# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson#
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson'''
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelsonCreate a wx-style active list on stdout based on a Mercurial
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelsonworkspace in support of webrev's Mercurial support.
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson'''
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson#
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson# NB: This assumes the normal onbld directory structure
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson#
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelsonimport sys, os
87ab362234f761757d96ff1a758ab5c3bd85ed83Richard Lowe
87ab362234f761757d96ff1a758ab5c3bd85ed83Richard Lowesys.path.insert(1, os.path.join(os.path.dirname(__file__), "..", "lib",
87ab362234f761757d96ff1a758ab5c3bd85ed83Richard Lowe "python%d.%d" % sys.version_info[:2]))
87ab362234f761757d96ff1a758ab5c3bd85ed83Richard Lowe
87ab362234f761757d96ff1a758ab5c3bd85ed83Richard Lowe# Allow running from the source tree, using the modules in the source tree
87ab362234f761757d96ff1a758ab5c3bd85ed83Richard Lowesys.path.insert(2, os.path.join(os.path.dirname(__file__), ".."))
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelsonfrom onbld.Scm import Version
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelsontry:
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson Version.check_version()
c959a081a8aebb76386b6d8ea3afa850e328f6c7Richard Loweexcept Version.VersionMismatch, versionerror:
c959a081a8aebb76386b6d8ea3afa850e328f6c7Richard Lowe sys.stderr.write("Error: %s\n" % versionerror)
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson sys.exit(1)
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
c959a081a8aebb76386b6d8ea3afa850e328f6c7Richard Lowe
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelsonimport getopt, binascii
8703921742d9c7d4d3724f89a39ff0e2725cbe7bRichard Lowefrom mercurial import error, hg, ui, util
8703921742d9c7d4d3724f89a39ff0e2725cbe7bRichard Lowefrom onbld.Scm.WorkSpace import WorkSpace
c959a081a8aebb76386b6d8ea3afa850e328f6c7Richard Lowe
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelsondef usage():
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson sys.stderr.write("usage: %s [-p parent] -w workspace\n" %
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson os.path.basename(__file__))
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson sys.exit(2)
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
c959a081a8aebb76386b6d8ea3afa850e328f6c7Richard Lowe
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelsondef main(argv):
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson try:
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson opts = getopt.getopt(argv, 'w:o:p:')[0]
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson except getopt.GetoptError, e:
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson sys.stderr.write(str(e) + '\n')
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson usage()
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson parentpath = None
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson wspath = None
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson outputfile = None
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson for opt, arg in opts:
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson if opt == '-w':
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson wspath = arg
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson elif opt == '-o':
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson outputfile = arg
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson elif opt == '-p':
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson parentpath = arg
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson if not wspath:
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson usage()
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson try:
c959a081a8aebb76386b6d8ea3afa850e328f6c7Richard Lowe repository = hg.repository(ui.ui(), wspath)
8703921742d9c7d4d3724f89a39ff0e2725cbe7bRichard Lowe except error.RepoError, e:
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson sys.stderr.write("failed to open repository: %s\n" % e)
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson sys.exit(1)
c959a081a8aebb76386b6d8ea3afa850e328f6c7Richard Lowe
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson ws = WorkSpace(repository)
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson act = ws.active(parentpath)
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson node = act.parenttip.node()
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson parenttip = binascii.hexlify(node)
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson fh = None
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson if outputfile:
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson try:
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson fh = open(outputfile, 'w')
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson except EnvironmentError, e:
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson sys.stderr.write("could not open output file: %s\n" % e)
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson sys.exit(1)
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson else:
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson fh = sys.stdout
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson fh.write("HG_PARENT=%s\n" % parenttip)
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson entries = [i for i in act]
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson entries.sort()
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson for entry in entries:
e6ccc173e1790aa96d62728631f62d5217d0188dEdward Pilatowicz if entry.is_renamed() or entry.is_copied():
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson fh.write("%s %s\n" % (entry.name, entry.parentname))
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson else:
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson fh.write("%s\n" % entry.name)
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson # Strip blank lines.
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson comments = filter(lambda x: x and not x.isspace(),
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson entry.comments)
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson fh.write('\n')
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson if comments:
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson fh.write('%s\n' % '\n'.join(comments))
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson else:
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson fh.write("*** NO COMMENTS ***\n")
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson fh.write('\n')
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelsonif __name__ == '__main__':
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson try:
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson main(sys.argv[1:])
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson except KeyboardInterrupt:
cdf0c1d55d9b3b6beaf994835440dfb01aef5cf0mjnelson sys.exit(1)
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson except util.Abort, msg:
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson sys.stderr.write("Abort: %s\n" % msg)
9a70fc3be3b1e966bf78825cdb8d509963a6f0a1Mark J. Nelson sys.exit(1)