You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2013/12/18 23:10:45 UTC
[2/6] git commit: [#6821] Handle errors in threaded git LCDs without
indefinitely blocking request
[#6821] Handle errors in threaded git LCDs without indefinitely blocking request
Signed-off-by: Cory Johns <cj...@slashdotmedia.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/852f084f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/852f084f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/852f084f
Branch: refs/heads/master
Commit: 852f084f2b0cd3daa7e931b0654f14903c7ce410
Parents: db19ef7
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Fri Dec 6 16:02:59 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Wed Dec 18 22:10:33 2013 +0000
----------------------------------------------------------------------
ForgeGit/forgegit/model/git_repo.py | 41 +++++++++++---------
.../forgegit/tests/model/test_repository.py | 10 +++++
requirements-sf.txt | 2 +-
3 files changed, 33 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/852f084f/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 145e528..f08fdd4 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -518,25 +518,28 @@ class GitImplementation(M.RepositoryImplementation):
num_threads += 1
def get_ids():
paths = set(chunks.get())
- commit_id = commit._id
- while paths and commit_id:
- if time() - start_time > timeout:
- log.error('last_commit_ids timeout for %s on %s', commit._id, ', '.join(paths))
- break
- lines = self._git.git.log(
- commit._id, '--', *paths,
- pretty='format:%H',
- name_only=True,
- max_count=1,
- no_merges=True).split('\n')
- commit_id = lines[0]
- changes = set(lines[1:])
- changed = prefix_paths_union(paths, changes)
- for path in changed:
- result[path] = commit_id
- paths -= changed
- chunks.task_done()
- return
+ try:
+ commit_id = commit._id
+ while paths and commit_id:
+ if time() - start_time > timeout:
+ log.error('last_commit_ids timeout for %s on %s', commit._id, ', '.join(paths))
+ break
+ lines = self._git.git.log(
+ commit._id, '--', *paths,
+ pretty='format:%H',
+ name_only=True,
+ max_count=1,
+ no_merges=True).split('\n')
+ commit_id = lines[0]
+ changes = set(lines[1:])
+ changed = prefix_paths_union(paths, changes)
+ for path in changed:
+ result[path] = commit_id
+ paths -= changed
+ except Exception as e:
+ log.exception('Error in Git thread: %s', e)
+ finally:
+ chunks.task_done()
if num_threads == 1:
get_ids()
else:
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/852f084f/ForgeGit/forgegit/tests/model/test_repository.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py
index d2a9413..8569025 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -456,6 +456,16 @@ class TestGitImplementation(unittest.TestCase):
with h.push_config(tg.config, lcd_thread_chunk_size=1):
self.test_last_commit_ids()
+ def test_last_commit_ids_threaded_error(self):
+ with h.push_config(tg.config, lcd_thread_chunk_size=1):
+ repo_dir = pkg_resources.resource_filename(
+ 'forgegit', 'tests/data/testrename.git')
+ repo = mock.Mock(full_fs_path=repo_dir)
+ impl = GM.git_repo.GitImplementation(repo)
+ impl._git = None
+ lcds = impl.last_commit_ids(mock.Mock(_id='13951944969cf45a701bf90f83647b309815e6d5'), ['f2.txt', 'f3.txt'])
+ self.assertEqual(lcds, {})
+
class TestGitCommit(unittest.TestCase):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/852f084f/requirements-sf.txt
----------------------------------------------------------------------
diff --git a/requirements-sf.txt b/requirements-sf.txt
index 81b2424..8fa5d69 100644
--- a/requirements-sf.txt
+++ b/requirements-sf.txt
@@ -4,7 +4,7 @@ akismet==0.2.0
amqplib==0.6.1
kombu==1.0.4
coverage==3.5a1-20110413
-ForgeHg==0.1.18
+ForgeHg==0.1.19
ForgePastebin==0.3.0
GoogleCodeWikiImporter==0.4.7
mechanize==0.2.4