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'])