diff options
author | Guido Günther <agx@sigxcpu.org> | 2012-11-24 14:25:52 +0100 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2012-11-24 14:28:21 +0100 |
commit | 8b01d37b1bd97795356ae735ee264362daf5dfae (patch) | |
tree | 1dfbb0377e4586f920557c126e03f24a01219a0b | |
parent | 85f3f9ff9e28c1bc04164433a617a94a8fb9c69c (diff) |
git-import-dscs: Properly catch import errors
Closes: #694113
-rw-r--r-- | gbp/scripts/import_dscs.py | 8 | ||||
-rw-r--r-- | tests/14_test_gbp_import_dscs.py | 87 |
2 files changed, 92 insertions, 3 deletions
diff --git a/gbp/scripts/import_dscs.py b/gbp/scripts/import_dscs.py index 0ba33353..565f6df2 100644 --- a/gbp/scripts/import_dscs.py +++ b/gbp/scripts/import_dscs.py @@ -41,7 +41,7 @@ class GitImportDsc(object): self.args = args def importdsc(self, dsc): - import_dsc.main(['git-import-dsc'] + self.args + [dsc.dscfile]) + return import_dsc.main(['git-import-dsc'] + self.args + [dsc.dscfile]) def fetch_snapshots(pkg, downloaddir): @@ -146,11 +146,13 @@ def main(argv): # no git repository there yet dirs['pkg'] = os.path.join(dirs['top'], dscs[0].pkg) - importer.importdsc(dscs[0]) + if importer.importdsc(dscs[0]): + raise GbpError("Failed to import '%s'" % dscs[0]) os.chdir(dirs['pkg']) for dsc in dscs[1:]: - importer.importdsc(dsc) + if importer.importdsc(dsc): + raise GbpError("Failed to import '%s'" % dscs[0]) except (GbpError, gbpc.CommandExecFailed, GitRepositoryError) as err: if len(err.__str__()): diff --git a/tests/14_test_gbp_import_dscs.py b/tests/14_test_gbp_import_dscs.py new file mode 100644 index 00000000..1525ae9e --- /dev/null +++ b/tests/14_test_gbp_import_dscs.py @@ -0,0 +1,87 @@ +# vim: set fileencoding=utf-8 : +# (C) 2012 Guido Günther <agx@sigxcpu.org> +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +"""Test L{gbp.pq}""" + +import os +import testutils +import gbp.scripts.import_dscs as import_dscs + + +class StubGitImportDsc(object): + """ + A Stub for GitImportDsc. + """ + def __init__(self, args): + self.failfile = None + for arg in args: + if arg.startswith('--failfile'): + self.failfile = "%s.dsc" % arg.split('=')[1] + + def importdsc(self, dsc): + """ + Stub the dsc import and fail if we were told to do + so by the --failfile option. + """ + return 1 if dsc.filename == self.failfile else 0 + +class DscStub(object): + def __init__(self, filename, version): + self.filename = filename + self.version = version + +def stub_parse_dsc(filename): + # filename is like file1.dsc, file2.dsc, use + # the digit as version number + version = filename[4] + return DscStub(filename, version) + + +# hook up stubs +import_dscs.GitImportDsc = StubGitImportDsc +import_dscs.parse_dsc = stub_parse_dsc + + +class TestImportDscs(testutils.DebianGitTestRepo): + """Test L{gbp.scripts.import_dscs}'s """ + + def setUp(self): + self.toplevel = os.getcwd() + testutils.DebianGitTestRepo.setUp(self) + os.chdir(self.repo.path) + + def test_import_success(self): + """Test importing success with stub""" + ret = import_dscs.main(['argv0', 'file1.dsc', 'file2.dsc']) + self.assertEqual(ret, 0) + + def test_import_fail_first(self): + ret = import_dscs.main(['argv0', + '--failfile=file1', + 'file1.dsc']) + self.assertEqual(ret, 1) + + def test_import_fail_second(self): + ret = import_dscs.main(['argv0', + '--failfile=file1', + '--failfile=file2', + 'file1.dsc', + 'file2.dsc']) + self.assertEqual(ret, 1) + + def tearDown(self): + testutils.DebianGitTestRepo.tearDown(self) + os.chdir(self.toplevel) + |