diff options
author | Sebastian Thiel <byronimo@gmail.com> | 2015-06-10 16:59:00 +0200 |
---|---|---|
committer | Sebastian Thiel <byronimo@gmail.com> | 2015-06-10 16:59:00 +0200 |
commit | 4a771adc5352dd3876dd2ef3d0c52c8e803fc084 (patch) | |
tree | dca5577bdaa85991d92b9b7e9f6b484837c140ff | |
parent | 982eefb2008826604d54c1a6622c12240efb0961 (diff) | |
download | gitpython-4a771adc5352dd3876dd2ef3d0c52c8e803fc084.tar.gz |
fix(remote): assert fetch respec is set
It turns out we can't deal do fetches if no refspec is set as git
will change the format of the fetch return values, providing less
information than usual.
A test was added to show that such a case will fail, and an assertion
will assure we don't attempt to fetch/pull if there is no refspec
for 'fetch'.
Closes #296
-rw-r--r-- | git/remote.py | 14 | ||||
-rw-r--r-- | git/test/test_remote.py | 5 |
2 files changed, 19 insertions, 0 deletions
diff --git a/git/remote.py b/git/remote.py index 6126e3cc..c9da1979 100644 --- a/git/remote.py +++ b/git/remote.py @@ -604,6 +604,18 @@ class Remote(LazyMixin, Iterable): raise return output + def _assert_refspec(self): + """Turns out we can't deal with remotes if the refspec is missing""" + config = self.config_reader + try: + if config.get_value('fetch', default=type) is type: + msg = "Remote '%s' has no refspec set.\n" + msg += "You can set it as follows:" + msg += " 'git config --add \"remote.%s.fetch +refs/heads/*:refs/heads/*\"'." % self.name + raise AssertionError(msg) + finally: + config.release() + def fetch(self, refspec=None, progress=None, **kwargs): """Fetch the latest changes for this remote @@ -631,6 +643,7 @@ class Remote(LazyMixin, Iterable): :note: As fetch does not provide progress information to non-ttys, we cannot make it available here unfortunately as in the 'push' method.""" + self._assert_refspec() kwargs = add_progress(kwargs, self.repo.git, progress) if isinstance(refspec, list): args = refspec @@ -651,6 +664,7 @@ class Remote(LazyMixin, Iterable): :param progress: see 'push' method :param kwargs: Additional arguments to be passed to git-pull :return: Please see 'fetch' method """ + self._assert_refspec() kwargs = add_progress(kwargs, self.repo.git, progress) proc = self.repo.git.pull(self, refspec, with_extended_output=True, as_process=True, v=True, **kwargs) res = self._get_fetch_info_from_stderr(proc, progress or RemoteProgress()) diff --git a/git/test/test_remote.py b/git/test/test_remote.py index af854988..6c37614d 100644 --- a/git/test/test_remote.py +++ b/git/test/test_remote.py @@ -494,6 +494,11 @@ class TestRemote(TestBase): fetch_info_line_fmt = "c437ee5deb8d00cf02f03720693e4c802e99f390 not-for-merge %s '0.3' of " fetch_info_line_fmt += "git://github.com/gitpython-developers/GitPython" remote_info_line_fmt = "* [new branch] nomatter -> %s" + + self.failUnlessRaises(ValueError, FetchInfo._from_line, self.rorepo, + remote_info_line_fmt % "refs/something/branch", + "269c498e56feb93e408ed4558c8138d750de8893\t\t/Users/ben/test/foo\n") + fi = FetchInfo._from_line(self.rorepo, remote_info_line_fmt % "local/master", fetch_info_line_fmt % 'remote-tracking branch') |