diff --git a/bin/loman.py b/bin/loman.py index c52a5b3d8c..9a3bd3cacf 100755 --- a/bin/loman.py +++ b/bin/loman.py @@ -97,6 +97,9 @@ def main(argv): 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.') @@ -110,14 +113,17 @@ def main(argv): name = args[0] local_tree = _ReadManifest(options.local_manifest) + main_tree = _ReadManifest(options.main_manifest) full_tree = _ReadManifest(options.full_manifest) - project_element = full_tree.GetProject(name) - if project_element == None: - Die('No project named, %s, in the default manifest.' % name) - success = local_tree.AddWorkonProjectElement(project_element) - if not success: - Die('name "%s" already exits with a different path.' % name) + # Only add this project to local_manifest.xml if not in manifest.xml + if main_tree.GetProject(name) == None: + project_element = full_tree.GetProject(name) + if project_element == None: + Die('No project named, %s, in the default manifest.' % name) + success = local_tree.AddWorkonProjectElement(project_element) + if not success: + Die('name "%s" already exits with a different path.' % name) try: print >> open(options.local_manifest, 'w'), local_tree.ToString() diff --git a/bin/loman_unittest.py b/bin/loman_unittest.py index 5788f0378a..924d08a08f 100755 --- a/bin/loman_unittest.py +++ b/bin/loman_unittest.py @@ -80,9 +80,13 @@ class MainTest(unittest.TestCase): def setUp(self): self.utf8 = "\n" - self.tiny_manifest = '\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 @@ -110,10 +114,11 @@ class MainTest(unittest.TestCase): default.flush() os.fsync(default.fileno()) temp = tempfile.NamedTemporaryFile('w') - print >> temp, '\n' + 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(), @@ -133,6 +138,7 @@ class MainTest(unittest.TestCase): 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): @@ -150,8 +156,27 @@ class MainTest(unittest.TestCase): 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' \ @@ -165,6 +190,7 @@ class MainTest(unittest.TestCase): os.fsync(temp.fileno()) self.assertRaises(SystemExit, loman.main, ['loman', 'add', '--workon', '-f', temp.name, + '-m', self.main.name, '-d', default.name, 'bar'])