diff --git a/bin/loman b/bin/loman deleted file mode 120000 index d0f8b11e30..0000000000 --- a/bin/loman +++ /dev/null @@ -1 +0,0 @@ -loman.py \ No newline at end of file diff --git a/bin/loman.py b/bin/loman.py deleted file mode 100755 index 3764a409e2..0000000000 --- a/bin/loman.py +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/python - -# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""This module allows adding and deleting of projects to the local manifest.""" - -import sys -import optparse -import os -import xml.etree.ElementTree as ElementTree - -from cros_build_lib import Die, FindRepoDir - - -def _ReadManifest(manifest, err_not_found=False): - if os.path.isfile(manifest): - ptree = LocalManifest(open(manifest).read()) - elif err_not_found: - Die('Manifest file, %s, not found' % manifest) - else: - ptree = LocalManifest() - ptree.Parse() - return ptree - - -class LocalManifest: - """Class which provides an abstraction for manipulating the local manifest.""" - - def __init__(self, text=None): - self._text = text or '\n' - - def Parse(self): - """Parse the manifest.""" - self._root = ElementTree.fromstring(self._text) - - def AddProjectElement(self, element, workon='False', remote=None): - """Add a new project element to the manifest tree. - - Returns: - True on success. - """ - name = element.attrib['name'] - path = element.attrib['path'] - for project in self._root.findall('project'): - if project.attrib['path'] == path or project.attrib['name'] == name: - if project.attrib['path'] == path and project.attrib['name'] == name: - return True - else: - return False - element.attrib['workon'] = workon - if remote is not None: - element.attrib['remote'] = remote - element.tail = '\n' - self._root.append(element) - return True - - def AddProject(self, name, path, workon='False', remote=None): - """Add a workon project if it is not already in the manifest. - - Returns: - True on success. - """ - element = ElementTree.Element('project', name=name, path=path) - return self.AddProjectElement(element, workon=workon, remote=remote) - - def AddWorkonProjectElement(self, element): - return self.AddProjectElement(element, workon='True') - - def AddWorkonProject(self, name, path): - return self.AddProject(name, path, workon='True') - - def AddNonWorkonProjectElement(self, element, remote): - return self.AddProjectElement(element, workon='False', remote=remote) - - def AddNonWorkonProject(self, name, path, remote): - return self.AddProject(name, path, workon='False', remote=remote) - - def GetProject(self, name): - """Accessor method for getting a project node from the manifest tree. - - Returns: - project element node from ElementTree, otherwise, None - """ - - for project in self._root.findall('project'): - if project.attrib['name'] == name: - return project - return None - - def ToString(self): - return ElementTree.tostring(self._root, encoding='UTF-8') - - -def main(argv): - repo_dir = FindRepoDir() - if not repo_dir: - Die("Unable to find repo dir.") - - usage = 'usage: %prog add [options] ' - parser = optparse.OptionParser(usage=usage) - parser.add_option('-w', '--workon', action='store_true', dest='workon', - default=False, help='Is this a workon package?') - parser.add_option('-f', '--file', dest='local_manifest', - default='%s/local_manifest.xml' % repo_dir, - help='Non-default manifest file to read.') - parser.add_option('-m', '--main', dest='main_manifest', - default='%s/manifest.xml' % repo_dir, - help='Main manifest file to read.') - parser.add_option('-d', '--default', dest='full_manifest', - default='%s/manifests/full.xml' % repo_dir, - help='Default manifest file to read.') - parser.add_option('-r', '--remote', dest='remote', - default=None) - (options, args) = parser.parse_args(argv[2:]) - if len(args) < 1: - parser.error('Not enough arguments') - if argv[1] not in ['add']: - parser.error('Unsupported command: %s.' % argv[1]) - if not options.workon and options.remote is None: - parser.error('Adding non-workon projects requires a remote.') - name = args[0] - - local_tree = _ReadManifest(options.local_manifest) - main_tree = _ReadManifest(options.main_manifest) - full_tree = _ReadManifest(options.full_manifest) - - # Only add this project to local_manifest.xml if not in manifest.xml - if options.workon: - if main_tree.GetProject(name) is None: - project_element = full_tree.GetProject(name) - if project_element is None: - Die('No project named %s, in the default manifest.' % name) - success = local_tree.AddWorkonProjectElement(project_element) - if not success: - Die('Name "%s" already exists with a different path.' % name) - else: - success = local_tree.AddNonWorkonProject(name, args[1], options.remote) - if not success: - Die('Name "%s" already exists with a different path.' % name) - - try: - print >> open(options.local_manifest, 'w'), local_tree.ToString() - except Exception, e: - Die('Error writing to manifest: %s' % e) - - -if __name__ == '__main__': - main(sys.argv) diff --git a/bin/loman_unittest.py b/bin/loman_unittest.py deleted file mode 100755 index 924d08a08f..0000000000 --- a/bin/loman_unittest.py +++ /dev/null @@ -1,198 +0,0 @@ -#!/usr/bin/python - -# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Unittests for loman.""" - -import os -import StringIO -import sys -import tempfile -import unittest - -import loman - -_TEST_MANIFEST1 = """ - -""" - -class LocalManifestTest(unittest.TestCase): - - def setUp(self): - self.utf8 = "\n" - self.tiny_manifest = '\n' - - def testSimpleParse(self): - ptree = loman.LocalManifest() - ptree.Parse() - - def testParse(self): - ptree = loman.LocalManifest(self.tiny_manifest) - ptree.Parse() - self.assertEqual(ptree.ToString(), self.utf8 + self.tiny_manifest) - - def testUTF8Parse(self): - ptree = loman.LocalManifest(self.utf8 + self.tiny_manifest) - ptree.Parse() - self.assertEqual(ptree.ToString(), self.utf8 + self.tiny_manifest) - - def testGetProject(self): - ptree = loman.LocalManifest('\n') - ptree.Parse() - ptree.AddProject('foo', 'path/to/foo') - project = ptree.GetProject('foo') - self.assertEqual(project.attrib['name'], 'foo') - - def testAddNew(self): - ptree = loman.LocalManifest('\n') - ptree.Parse() - self.assertTrue(ptree.AddWorkonProject('foo', 'path/to/foo')) - self.assertEqual( - ptree.ToString(), - self.utf8 + '\n' - '\n' - '') - - def testAddNewElement(self): - dtree = loman.LocalManifest('\n') - dtree.Parse() - dtree.AddProject('foo', 'path/to/foo') - ptree = loman.LocalManifest('\n') - ptree.Parse() - ptree.AddWorkonProjectElement(dtree.GetProject('foo')) - self.assertEqual( - ptree.ToString(), - self.utf8 + '\n' - '\n' - '') - - def testAddDup(self): - ptree = loman.LocalManifest('\n') - ptree.Parse() - ptree.AddWorkonProject('foo', 'path/to/foo') - self.assertTrue(ptree.AddWorkonProject('foo', 'path/to/foo')) - self.assertTrue(not ptree.AddWorkonProject('foo', 'path/foo')) - self.assertTrue(not ptree.AddWorkonProject('foobar', 'path/to/foo')) - -class MainTest(unittest.TestCase): - - def setUp(self): - self.utf8 = "\n" - self.tiny_manifest = self.utf8 + '\n\n' - self.stderr = sys.stderr - sys.stderr = StringIO.StringIO() - self.main = tempfile.NamedTemporaryFile('w') - print >> self.main, '%s' % self.tiny_manifest - self.main.flush() - os.fsync(self.main.fileno()) - - def tearDown(self): - sys.stderr = self.stderr - - def testNotEnoughArgs(self): - err_msg = 'Not enough arguments\n' - self.assertRaises(SystemExit, loman.main, ['loman']) - self.assertTrue(sys.stderr.getvalue().endswith(err_msg)) - - def testNotWorkon(self): - err_msg = 'Adding of non-workon projects is currently unsupported.\n' - self.assertRaises(SystemExit, loman.main, ['loman', 'add', 'foo', 'path']) - self.assertTrue(sys.stderr.getvalue().endswith(err_msg)) - - def testBadCommand(self): - err_msg = 'Unsupported command: bad.\n' - self.assertRaises(SystemExit, loman.main, ['loman', 'bad', 'foo', 'path']) - self.assertTrue(sys.stderr.getvalue().endswith(err_msg)) - - def testSimpleAdd(self): - default = tempfile.NamedTemporaryFile('w') - print >> default, '\n' \ - '\n' \ - '\n' - default.flush() - os.fsync(default.fileno()) - temp = tempfile.NamedTemporaryFile('w') - print >> temp, '%s' % self.tiny_manifest - temp.flush() - os.fsync(temp.fileno()) - loman.main(['loman', 'add', '--workon', '-f', temp.name, - '-m', self.main.name, - '-d', default.name, 'foo']) - self.assertEqual( - open(temp.name, 'r').read(), - self.utf8 + '\n' - '\n' - '\n') - - def testIgnoredPath(self): - default = tempfile.NamedTemporaryFile('w') - print >> default, '\n' \ - '\n' \ - '\n' - default.flush() - os.fsync(default.fileno()) - temp = tempfile.NamedTemporaryFile('w') - print >> temp, '\n' - temp.flush() - os.fsync(temp.fileno()) - loman.main(['loman', 'add', '--workon', '-f', temp.name, - '-m', self.main.name, - '-d', default.name, 'foo']) - - def testAddDup(self): - default = tempfile.NamedTemporaryFile('w') - print >> default, '\n' \ - '\n' \ - '\n' - default.flush() - os.fsync(default.fileno()) - temp = tempfile.NamedTemporaryFile('w') - print >> temp, '\n' \ - '\n' \ - '\n' - temp.flush() - os.fsync(temp.fileno()) - self.assertRaises(SystemExit, loman.main, - ['loman', 'add', '--workon', '-f', temp.name, - '-m', self.main.name, - '-d', default.name, 'foo']) - - def testAddDupInMain(self): - default = tempfile.NamedTemporaryFile('w') - print >> default, '\n' \ - '\n' \ - '\n' - default.flush() - os.fsync(default.fileno()) - temp = tempfile.NamedTemporaryFile('w') - print >> temp, '%s' % self.tiny_manifest - temp.flush() - os.fsync(temp.fileno()) - loman.main(['loman', 'add', '--workon', '-f', temp.name, - '-m', default.name, - '-d', default.name, 'foo']) - self.assertEqual( - open(temp.name, 'r').read(), - self.tiny_manifest) - - def testAddNonexistant(self): - default = tempfile.NamedTemporaryFile('w') - print >> default, '\n' \ - '\n' \ - '\n' - default.flush() - os.fsync(default.fileno()) - temp = tempfile.NamedTemporaryFile('w') - print >> temp, '\n' - temp.flush() - os.fsync(temp.fileno()) - self.assertRaises(SystemExit, loman.main, - ['loman', 'add', '--workon', '-f', temp.name, - '-m', self.main.name, - '-d', default.name, 'bar']) - - -if __name__ == '__main__': - unittest.main()