Skip to content

Commit f070d2c

Browse files
committed
use RepoHelper instead of Repo in SM
1 parent 37bf87c commit f070d2c

File tree

2 files changed

+43
-12
lines changed

2 files changed

+43
-12
lines changed

elasticgit/search.py

+32-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22
from urllib import quote
3+
from urlparse import urlparse
34

45
from git import Repo
56

@@ -8,6 +9,7 @@
89
ObjectSearchResults, DictSearchResults, ListSearchResults)
910

1011
from elasticgit.utils import introspect_properties
12+
from elasticgit.storage.remote import RemoteStorageManager
1113

1214

1315
def index_name(prefix, name):
@@ -163,6 +165,30 @@ def get_results_class(self):
163165
}.get(results_class)
164166

165167

168+
class RepoHelper(object):
169+
170+
def __init__(self, repo_url):
171+
self.repo_url = repo_url
172+
if any([
173+
repo_url.startswith('http://'),
174+
repo_url.startswith('https://')]):
175+
self.repo_obj = RemoteStorageManager(repo_url)
176+
else:
177+
self.repo_obj = Repo(repo_url)
178+
179+
def active_branch_name(self):
180+
if isinstance(self.repo_obj, Repo):
181+
return self.repo_obj.active_branch.name
182+
return self.repo_obj.active_branch()
183+
184+
def default_index_prefix(self):
185+
name = os.path.basename(self.repo_url)
186+
name_no_ext, ext = os.path.splitext(name)
187+
if ext in ('.git', '.json'):
188+
return name_no_ext
189+
return name
190+
191+
166192
class SM(S):
167193
"""
168194
A search interface similar to :py:class:`elasticutils.S` to
@@ -191,12 +217,15 @@ def __init__(self, model_class, in_, index_prefixes=None):
191217
self.index_prefixes = index_prefixes
192218

193219
self.repos = map(
194-
lambda repo: (repo if isinstance(repo, Repo) else Repo(repo)),
220+
lambda repo:
221+
repo
222+
if isinstance(repo, RepoHelper)
223+
else RepoHelper(repo),
195224
self.repos)
196225

197226
if not self.index_prefixes:
198227
self.index_prefixes = map(
199-
lambda r: os.path.basename(r.working_dir),
228+
lambda repo: repo.default_index_prefix(),
200229
self.repos)
201230

202231
def get_repo_indexes(self):
@@ -209,7 +238,7 @@ def get_repo_indexes(self):
209238
return []
210239

211240
return map(
212-
lambda (ip, r): index_name(ip, r.active_branch.name),
241+
lambda (ip, r): index_name(ip, r.active_branch_name()),
213242
zip(self.index_prefixes, self.repos))
214243

215244
def _clone(self, next_step=None):

elasticgit/tests/test_search.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,19 @@ def test_init(self):
2626
repos = [self.repo1, self.repo2]
2727
repo_workdirs = map(lambda r: r.working_dir, repos)
2828

29-
s_obj = SM(TestPerson, in_=repos)
30-
self.assertEqual(s_obj.repos, [self.repo1, self.repo2])
29+
s_obj = SM(TestPerson, in_=repo_workdirs)
30+
self.assertEqual(
31+
[r.repo_obj for r in s_obj.repos],
32+
[self.repo1, self.repo2])
3133
self.assertEqual(s_obj.index_prefixes, [
3234
os.path.basename(self.repo1.working_dir),
3335
os.path.basename(self.repo2.working_dir)
3436
])
3537

3638
s_obj = SM(TestPerson, in_=repo_workdirs, index_prefixes=['i1', 'i2'])
3739
self.assertEqual(
38-
map(lambda r: r.working_dir, s_obj.repos),
39-
repo_workdirs)
40+
[r.repo_obj for r in s_obj.repos],
41+
[self.repo1, self.repo2])
4042
self.assertEqual(s_obj.index_prefixes, ['i1', 'i2'])
4143

4244
def test_get_repo_indexes(self):
@@ -46,12 +48,12 @@ def test_get_repo_indexes(self):
4648
os.path.basename(self.repo1.working_dir),
4749
self.repo1.active_branch.name)
4850

49-
s_obj = SM(TestPerson, in_=[self.repo1])
51+
s_obj = SM(TestPerson, in_=[self.repo1.working_dir])
5052
self.assertEqual(s_obj.get_repo_indexes(), [default_index1])
5153

5254
s_obj = SM(
5355
TestPerson,
54-
in_=[self.repo1, self.repo2],
56+
in_=[self.repo1.working_dir, self.repo2.working_dir],
5557
index_prefixes=[self.index_prefix1, self.index_prefix2])
5658
self.assertEqual(
5759
s_obj.get_repo_indexes(),
@@ -61,7 +63,7 @@ def test_get_repo_indexes(self):
6163
self.workspace1.im.index_name(self.repo1.active_branch.name))
6264

6365
def test_get_indexes(self):
64-
s_obj = SM(TestPerson, in_=[self.repo1])
66+
s_obj = SM(TestPerson, in_=[self.repo1.working_dir])
6567
self.assertEqual(
6668
s_obj.get_indexes(),
6769
[index_name(
@@ -83,7 +85,7 @@ def test_get_es(self):
8385
def test_clone(self):
8486
s_obj = SM(
8587
TestPerson,
86-
in_=[self.repo1],
88+
in_=[self.repo1.working_dir],
8789
index_prefixes=[self.index_prefix1])
8890
s_obj_cloned = s_obj._clone(next_step=('indexes', []))
8991

@@ -139,7 +141,7 @@ def test_multi_index_query(self):
139141

140142
objects = SM(
141143
TestPerson,
142-
in_=[self.repo1, self.repo2],
144+
in_=[self.repo1.working_dir, self.repo2.working_dir],
143145
index_prefixes=[self.index_prefix1, self.index_prefix2]) \
144146
.everything()
145147
self.assertEqual(len(objects), 2)

0 commit comments

Comments
 (0)