Browse Source

Add class ChangeDir, amend unsafe subprocess.

Add:
    bitshift/crawler/git_indexer.py
        -add ChangeDir class, a context-management wrapper for os.chdir().
        -replace unsafe "rm -rf" subprocess call with shutil.rmtree()
tags/v1.0^2
Severyn Kozak 10 years ago
parent
commit
c655d97f48
1 changed files with 48 additions and 7 deletions
  1. +48
    -7
      bitshift/crawler/git_indexer.py

+ 48
- 7
bitshift/crawler/git_indexer.py View File

@@ -4,11 +4,47 @@
...more info soon... ...more info soon...
""" """


import fileinput, subprocess, os
import shutil, subprocess, os


from ..database import Database from ..database import Database
from ..codelet import Codelet from ..codelet import Codelet


GIT_CLONE_DIR = "/tmp"

class ChangeDir(object):
"""
A wrapper class for os.chdir(), to map onto `with` and handle exceptions.

:ivar new_path: (str) The path to change the current directory to.
:ivar old_path: (str) The path of the directory to return to.
"""

def __init__(self, new_path):
"""
Construct the object.

:param new_path: The directory to enter.

:type new_path: str
"""

self.new_path = new_path

def __enter__(self):
"""
Change the current working-directory to **new_path**.
"""

self.old_path = os.getcwd()
os.chdir(self.new_path)

def __exit__(self, etype, value, traceback):
"""
Change the current working-directory to **old_path**.
"""

os.chdir(self.old_path)

def index_repository(repo_url, framework_name): def index_repository(repo_url, framework_name):
""" """
Insert a Codelet for every file in a Git repository. Insert a Codelet for every file in a Git repository.
@@ -19,9 +55,18 @@ def index_repository(repo_url, framework_name):
""" """


repo_name = repo_url.split("/")[-1] repo_name = repo_url.split("/")[-1]
subprocess.call("git clone %s" % repo_url, shell=True)
os.chdir(repo_name)
codelets = []


with ChangeDir(GIT_CLONE_DIR) as git_clone_dir:
subprocess.call("git clone %s" % repo_url, shell=True)
with ChangeDir(repo_name) as repository_dir:
codelets = _insert_repository_codelets(repo_url, repo_name,
framework_name)
shutil.rmtree("%s/%s" % (GIT_CLONE_DIR, repo_name))

return codelets

def _insert_repository_codelets(repo_url, repo_name, framework_name):
codelets = [] codelets = []
commits_meta = _get_commits_metadata() commits_meta = _get_commits_metadata()
for filename in commits_meta.keys(): for filename in commits_meta.keys():
@@ -36,10 +81,6 @@ def index_repository(repo_url, framework_name):
commits_meta[filename]["time_created"], commits_meta[filename]["time_created"],
commits_meta[filename]["time_last_modified"])) commits_meta[filename]["time_last_modified"]))


# Database.insert(codelet)

os.chdir("..")
subprocess.call("rm -rf %s" % repo_name, shell=True)
return codelets return codelets


def _generate_file_url(filename, repo_url, framework_name): def _generate_file_url(filename, repo_url, framework_name):


Loading…
Cancel
Save