Merge pull request #5115 from mitocw/cg/bugfix/add_git_clean
Fixes git export to support repositories with dots in their name and cleans export repo
This commit is contained in:
@@ -111,6 +111,7 @@ def export_to_git(course_id, repo, user='', rdir=None):
|
||||
['git', 'fetch', 'origin'],
|
||||
['git', 'reset', '--hard', 'origin/{0}'.format(branch)],
|
||||
['git', 'pull'],
|
||||
['git', 'clean', '-d', '-f'],
|
||||
]
|
||||
else:
|
||||
cmds = [['git', 'clone', repo]]
|
||||
@@ -126,7 +127,7 @@ def export_to_git(course_id, repo, user='', rdir=None):
|
||||
|
||||
# export course as xml before commiting and pushing
|
||||
root_dir = os.path.dirname(rdirp)
|
||||
course_dir = os.path.splitext(os.path.basename(rdirp))[0]
|
||||
course_dir = os.path.basename(rdirp).rsplit('.git', 1)[0]
|
||||
try:
|
||||
export_to_xml(modulestore(), contentstore(), course_id,
|
||||
root_dir, course_dir)
|
||||
|
||||
@@ -34,6 +34,28 @@ class TestExportGit(CourseTestCase):
|
||||
self.course_module = modulestore().get_course(self.course.id)
|
||||
self.test_url = reverse_course_url('export_git', self.course.id)
|
||||
|
||||
def make_bare_repo_with_course(self, repo_name):
|
||||
"""
|
||||
Make a local bare repo suitable for exporting to in
|
||||
tests
|
||||
"""
|
||||
# Build out local bare repo, and set course git url to it
|
||||
repo_dir = os.path.abspath(git_export_utils.GIT_REPO_EXPORT_DIR)
|
||||
os.mkdir(repo_dir)
|
||||
self.addCleanup(shutil.rmtree, repo_dir)
|
||||
|
||||
bare_repo_dir = '{0}/{1}.git'.format(
|
||||
os.path.abspath(git_export_utils.GIT_REPO_EXPORT_DIR),
|
||||
repo_name
|
||||
)
|
||||
os.mkdir(bare_repo_dir)
|
||||
self.addCleanup(shutil.rmtree, bare_repo_dir)
|
||||
|
||||
subprocess.check_output(['git', '--bare', 'init', ], cwd=bare_repo_dir)
|
||||
self.populate_course()
|
||||
self.course_module.giturl = 'file://{}'.format(bare_repo_dir)
|
||||
modulestore().update_item(self.course_module, self.user.id)
|
||||
|
||||
def test_giturl_missing(self):
|
||||
"""
|
||||
Test to make sure an appropriate error is displayed
|
||||
@@ -79,21 +101,42 @@ class TestExportGit(CourseTestCase):
|
||||
"""
|
||||
Test successful course export response.
|
||||
"""
|
||||
# Build out local bare repo, and set course git url to it
|
||||
repo_dir = os.path.abspath(git_export_utils.GIT_REPO_EXPORT_DIR)
|
||||
os.mkdir(repo_dir)
|
||||
self.addCleanup(shutil.rmtree, repo_dir)
|
||||
|
||||
bare_repo_dir = '{0}/test_repo.git'.format(
|
||||
os.path.abspath(git_export_utils.GIT_REPO_EXPORT_DIR))
|
||||
os.mkdir(bare_repo_dir)
|
||||
self.addCleanup(shutil.rmtree, bare_repo_dir)
|
||||
|
||||
subprocess.check_output(['git', '--bare', 'init', ], cwd=bare_repo_dir)
|
||||
|
||||
self.populate_course()
|
||||
self.course_module.giturl = 'file://{}'.format(bare_repo_dir)
|
||||
modulestore().update_item(self.course_module, self.user.id)
|
||||
|
||||
self.make_bare_repo_with_course('test_repo')
|
||||
response = self.client.get('{}?action=push'.format(self.test_url))
|
||||
self.assertIn('Export Succeeded', response.content)
|
||||
|
||||
def test_repo_with_dots(self):
|
||||
"""
|
||||
Regression test for a bad directory pathing of repo's that have dots.
|
||||
"""
|
||||
self.make_bare_repo_with_course('test.repo')
|
||||
response = self.client.get('{}?action=push'.format(self.test_url))
|
||||
self.assertIn('Export Succeeded', response.content)
|
||||
|
||||
def test_dirty_repo(self):
|
||||
"""
|
||||
Add additional items not in the repo and make sure they aren't
|
||||
there after the export. This allows old content to removed
|
||||
in the repo.
|
||||
"""
|
||||
repo_name = 'dirty_repo1'
|
||||
self.make_bare_repo_with_course(repo_name)
|
||||
git_export_utils.export_to_git(self.course.id,
|
||||
self.course_module.giturl, self.user)
|
||||
|
||||
# Make arbitrary change to course to make diff
|
||||
self.course_module.matlab_api_key = 'something'
|
||||
modulestore().update_item(self.course_module, self.user.id)
|
||||
# Touch a file in the directory, export again, and make sure
|
||||
# the test file is gone
|
||||
repo_dir = os.path.join(
|
||||
os.path.abspath(git_export_utils.GIT_REPO_EXPORT_DIR),
|
||||
repo_name
|
||||
)
|
||||
test_file = os.path.join(repo_dir, 'test.txt')
|
||||
open(test_file, 'a').close()
|
||||
self.assertTrue(os.path.isfile(test_file))
|
||||
git_export_utils.export_to_git(self.course.id,
|
||||
self.course_module.giturl, self.user)
|
||||
self.assertFalse(os.path.isfile(test_file))
|
||||
|
||||
Reference in New Issue
Block a user