def reset(request): repo = Project.objects.get(id=request.GET['repo_id']) user_id = int(request.COOKIES['user']) user = User.objects.get(id=user_id) folder = User.objects.get(id=user_id).folder name = repo.name repo_path = os.path.join(base_path, folder, name) os.chdir(repo_path) if int(repo.admin.id) != user_id: return JsonResponse( dict(action=False, info='you are not the owner of this repo')) shell = Shell() shell.run('git reset --hard ' + request.GET['sha']) result = get_repo_info(repo_path, True) result['msg1'] = shell.info result['msg2'] = shell.err result['name'] = repo.name result['description'] = repo.description result['logo'] = repo.logo result['url'] = repo.url result['admin'] = repo.admin.to_obj() result['deploy'] = repo.deploy return JsonResponse(result)
def deploy(request): repo = Project.objects.get(id=request.GET['repo_id']) user_id = int(request.COOKIES['user']) user = User.objects.get(id=user_id) if int(repo.admin.id) != user.id: return JsonResponse( dict(action=False, info='you are not the owner of this repo')) folder = User.objects.get(id=user_id).folder name = repo.name repo_path = os.path.join(base_path, folder, name) deploy_path = os.path.join(repo_path, repo.deploy) online_path = os.path.join('/home/student/static', folder, name) remove_files = [] shell = Shell() if os.path.exists(online_path): remove_tree(online_path) copy_tree(deploy_path, os.path.join(online_path, repo.deploy)) return JsonResponse({ 'action': 'successful', online_path: online_path }, safe=False)
def clone(request): user_id = int(request.COOKIES['user']) user = User.objects.get(id=user_id) folder = user.folder url = request.GET['url'] name = request.GET['name'] description = request.GET[ 'description'] if 'description' in request.GET else 'description' logo = request.GET['logo'] if 'logo' in request.GET else 'logo' project = Project.objects.filter(name=name) if len(project) == 0: pro = Project.objects.create(name=name, description=description, logo=logo, url=url, admin=user) else: pro = project[0] pro.name = name pro.description = description pro.logo = logo pro.url = url pro.admin = user pro.save() my_path = os.path.join(base_path, folder) os.chdir(my_path) repo_path = os.path.join(my_path, name) if os.path.exists(repo_path): return remove_tree(repo_path) shell = Shell() print 'git clone ' + url + ' ' + name shell.run('git clone ' + url + ' ' + name) print 'git clone over' result = get_repo_info(repo_path, True) result['name'] = name result['description'] = description result['logo'] = logo result['url'] = url result['admin'] = user.to_obj() result['id'] = pro.id return JsonResponse(result)