##// END OF EJS Templates
Created install_git_hook more verbose version of previos code....
marcink -
r2618:e1370dcb beta
parent child Browse files
Show More
@@ -27,8 +27,6 b' import os'
27 import shutil
27 import shutil
28 import logging
28 import logging
29 import traceback
29 import traceback
30 import pkg_resources
31 from os.path import dirname as dn, join as jn
32 from datetime import datetime
30 from datetime import datetime
33
31
34 from rhodecode.lib.vcs.backends import get_backend
32 from rhodecode.lib.vcs.backends import get_backend
@@ -284,13 +282,15 b' class RepoModel(BaseModel):'
284 clone_uri)
282 clone_uri)
285 log_create_repository(new_repo.get_dict(),
283 log_create_repository(new_repo.get_dict(),
286 created_by=owner.username)
284 created_by=owner.username)
287
285 else:
286 # install the githook if it's a git repo
287 if repo_type == 'git':
288 ScmModel().install_git_hook(repo=new_repo.scm_instance)
288 # now automatically start following this repository as owner
289 # now automatically start following this repository as owner
289 ScmModel(self.sa).toggle_following_repo(new_repo.repo_id,
290 ScmModel(self.sa).toggle_following_repo(new_repo.repo_id,
290 owner.user_id)
291 owner.user_id)
291 return new_repo
292 return new_repo
292 except:
293 except:
293 print traceback.format_exc()
294 log.error(traceback.format_exc())
294 log.error(traceback.format_exc())
295 raise
295 raise
296
296
@@ -448,6 +448,7 b' class RepoModel(BaseModel):'
448 :param clone_uri:
448 :param clone_uri:
449 """
449 """
450 from rhodecode.lib.utils import is_valid_repo, is_valid_repos_group
450 from rhodecode.lib.utils import is_valid_repo, is_valid_repos_group
451 from rhodecode.model.scm import ScmModel
451
452
452 if parent:
453 if parent:
453 new_parent_path = os.sep.join(parent.full_path_splitted)
454 new_parent_path = os.sep.join(parent.full_path_splitted)
@@ -476,21 +477,7 b' class RepoModel(BaseModel):'
476 elif alias == 'git':
477 elif alias == 'git':
477 r = backend(repo_path, create=True, src_url=clone_uri, bare=True)
478 r = backend(repo_path, create=True, src_url=clone_uri, bare=True)
478 # add rhodecode hook into this repo
479 # add rhodecode hook into this repo
479
480 ScmModel().install_git_hook(repo=r)
480 loc = jn(r.path, 'hooks')
481 if not r.bare:
482 loc = jn(r.path, '.git', 'hooks')
483 if not os.path.isdir(loc):
484 os.makedirs(loc)
485
486 tmpl = pkg_resources.resource_string(
487 'rhodecode', jn('config', 'post_receive_tmpl.py')
488 )
489 _hook_file = jn(loc, 'post-receive')
490 with open(_hook_file, 'wb') as f:
491 f.write(tmpl)
492 os.chmod(_hook_file, 0755)
493
494 else:
481 else:
495 raise Exception('Undefined alias %s' % alias)
482 raise Exception('Undefined alias %s' % alias)
496
483
@@ -23,14 +23,18 b''
23 # You should have received a copy of the GNU General Public License
23 # You should have received a copy of the GNU General Public License
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 import os
25 import os
26 import re
26 import time
27 import time
27 import traceback
28 import traceback
28 import logging
29 import logging
29 import cStringIO
30 import cStringIO
31 import pkg_resources
32 from os.path import dirname as dn, join as jn
30
33
31 from sqlalchemy import func
34 from sqlalchemy import func
32 from pylons.i18n.translation import _
35 from pylons.i18n.translation import _
33
36
37 import rhodecode
34 from rhodecode.lib.vcs import get_backend
38 from rhodecode.lib.vcs import get_backend
35 from rhodecode.lib.vcs.exceptions import RepositoryError
39 from rhodecode.lib.vcs.exceptions import RepositoryError
36 from rhodecode.lib.vcs.utils.lazy import LazyProperty
40 from rhodecode.lib.vcs.utils.lazy import LazyProperty
@@ -545,3 +549,49 b' class ScmModel(BaseModel):'
545 choices.extend([x[0] for x in tags_group[0]])
549 choices.extend([x[0] for x in tags_group[0]])
546
550
547 return choices, hist_l
551 return choices, hist_l
552
553 def install_git_hook(self, repo, force_create=False):
554 """
555 Creates a rhodecode hook inside a git repository
556
557 :param repo: Instance of VCS repo
558 :param force_create: Create even if same name hook exists
559 """
560
561 loc = jn(repo.path, 'hooks')
562 if not repo.bare:
563 loc = jn(repo.path, '.git', 'hooks')
564 if not os.path.isdir(loc):
565 os.makedirs(loc)
566
567 tmpl = pkg_resources.resource_string(
568 'rhodecode', jn('config', 'post_receive_tmpl.py')
569 )
570
571 _hook_file = jn(loc, 'post-receive')
572 _rhodecode_hook = False
573 log.debug('Installing git hook in repo %s' % repo)
574 if os.path.exists(_hook_file):
575 # let's take a look at this hook, maybe it's rhodecode ?
576 log.debug('hook exists, checking if it is from rhodecode')
577 _HOOK_VER_PAT = re.compile(r'^RC_HOOK_VER')
578 with open(_hook_file, 'rb') as f:
579 data = f.read()
580 matches = re.compile(r'(?:%s)\s*=\s*(.*)'
581 % 'RC_HOOK_VER').search(data)
582 if matches:
583 try:
584 ver = matches.groups()[0]
585 log.debug('got %s it is rhodecode' % (ver))
586 _rhodecode_hook = True
587 except:
588 log.error(traceback.format_exc())
589
590 if _rhodecode_hook or force_create:
591 log.debug('writing hook file !')
592 with open(_hook_file, 'wb') as f:
593 tmpl = tmpl.replace('_TMPL_', rhodecode.__version__)
594 f.write(tmpl)
595 os.chmod(_hook_file, 0755)
596 else:
597 log.debug('skipping writing hook file') No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now