diff --git a/lms/djangoapps/dashboard/git_import.py b/lms/djangoapps/dashboard/git_import.py index a3391665fd..547235f724 100644 --- a/lms/djangoapps/dashboard/git_import.py +++ b/lms/djangoapps/dashboard/git_import.py @@ -21,7 +21,7 @@ from xmodule.modulestore import Location log = logging.getLogger(__name__) -GIT_REPO_DIR = getattr(settings, 'GIT_REPO_DIR', '/opt/edx/course_repos') +GIT_REPO_DIR = getattr(settings, 'GIT_REPO_DIR', '/edx/var/app/edxapp/course_repos') GIT_IMPORT_STATIC = getattr(settings, 'GIT_IMPORT_STATIC', True) diff --git a/lms/djangoapps/dashboard/sysadmin.py b/lms/djangoapps/dashboard/sysadmin.py index c036dc2c0e..2a7032649f 100644 --- a/lms/djangoapps/dashboard/sysadmin.py +++ b/lms/djangoapps/dashboard/sysadmin.py @@ -27,6 +27,7 @@ from django.views.decorators.http import condition from django_future.csrf import ensure_csrf_cookie from edxmako.shortcuts import render_to_response import mongoengine +from path import path from courseware.courses import get_course_by_id import dashboard.git_import as git_import @@ -333,8 +334,12 @@ class Courses(SysadminDashboardView): cmd = '' gdir = settings.DATA_DIR / cdir info = ['', '', ''] - if not os.path.exists(gdir): - return info + + # Try the data dir, then try to find it in the git import dir + if not gdir.exists(): + gdir = path(git_import.GIT_REPO_DIR) / cdir + if not gdir.exists(): + return info cmd = ['git', 'log', '-1', '--format=format:{ "commit": "%H", "author": "%an %ae", "date": "%ad"}', ] @@ -348,7 +353,7 @@ class Courses(SysadminDashboardView): return info - def get_course_from_git(self, gitloc, branch, datatable): + def get_course_from_git(self, gitloc, branch): """This downloads and runs the checks for importing a course in git""" if not (gitloc.endswith('.git') or gitloc.startswith('http:') or @@ -359,7 +364,7 @@ class Courses(SysadminDashboardView): if self.is_using_mongo: return self.import_mongo_course(gitloc, branch) - return self.import_xml_course(gitloc, branch, datatable) + return self.import_xml_course(gitloc, branch) def import_mongo_course(self, gitloc, branch): """ @@ -411,7 +416,7 @@ class Courses(SysadminDashboardView): msg += "
{0}
".format(escape(ret)) return msg - def import_xml_course(self, gitloc, branch, datatable): + def import_xml_course(self, gitloc, branch): """Imports a git course into the XMLModuleStore""" msg = u'' @@ -478,8 +483,7 @@ class Courses(SysadminDashboardView): msg += u'
  • {0}: {1}
  • '.format(escape(summary), escape(err)) msg += u'' - datatable['data'].append([course.display_name, cdir] - + self.git_info_for_course(cdir)) + return msg def make_datatable(self): @@ -491,7 +495,7 @@ class Courses(SysadminDashboardView): for (cdir, course) in courses.items(): gdir = cdir if '/' in cdir: - gdir = cdir.rsplit('/', 1)[1] + gdir = cdir.split('/')[1] data.append([course.display_name, cdir] + self.git_info_for_course(gdir)) @@ -530,8 +534,7 @@ class Courses(SysadminDashboardView): if action == 'add_course': gitloc = request.POST.get('repo_location', '').strip().replace(' ', '').replace(';', '') branch = request.POST.get('repo_branch', '').strip().replace(' ', '').replace(';', '') - datatable = self.make_datatable() - self.msg += self.get_course_from_git(gitloc, branch, datatable) + self.msg += self.get_course_from_git(gitloc, branch) elif action == 'del_course': course_id = request.POST.get('course_id', '').strip() @@ -575,10 +578,9 @@ class Courses(SysadminDashboardView): self.msg += \ u"{0} {1} = {2} ({3})".format( _('Deleted'), loc, course.id, course.display_name) - datatable = self.make_datatable() context = { - 'datatable': datatable, + 'datatable': self.make_datatable(), 'msg': self.msg, 'djangopid': os.getpid(), 'modeflag': {'courses': 'active-section'}, diff --git a/lms/djangoapps/dashboard/tests/test_sysadmin.py b/lms/djangoapps/dashboard/tests/test_sysadmin.py index ca10f7d7e6..0edab3668d 100644 --- a/lms/djangoapps/dashboard/tests/test_sysadmin.py +++ b/lms/djangoapps/dashboard/tests/test_sysadmin.py @@ -4,6 +4,7 @@ Provide tests for sysadmin dashboard feature in sysadmin.py import glob import os +import re import shutil import unittest @@ -454,6 +455,31 @@ class TestSysAdminMongoCourseImport(SysadminBaseTestCase): course = def_ms.get_course('MITx/edx4edx/edx4edx') self.assertIsNone(course) + def test_course_info(self): + """ + Check to make sure we are getting git info for courses + """ + # Regex of first 3 columns of course information table row for + # test course loaded from git. Would not have sha1 if + # git_info_for_course failed. + table_re = re.compile(r""" + \s+ + edX\sAuthor\sCourse\s+ # expected test git course name + MITx/edx4edx/edx4edx\s+ # expected test git course_id + [a-fA-F\d]{40} # git sha1 hash + """, re.VERBOSE) + + self._setstaff_login() + self._mkdir(getattr(settings, 'GIT_REPO_DIR')) + + # Make sure we don't have any git hashes on the page + response = self.client.get(reverse('sysadmin_courses')) + self.assertNotRegexpMatches(response.content, table_re) + + # Now add the course and make sure it does match + response = self._add_edx4edx() + self.assertRegexpMatches(response.content, table_re) + def test_gitlogs(self): """ Create a log entry and make sure it exists