From 923239a5dc611b37a56eed4b14d1974b248f5b71 Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Fri, 13 Jan 2012 16:38:00 +0000 Subject: [PATCH] Clean up old draft files when submitting a new draft - Legacy-Id: 3811 --- ietf/idrfc/expire.py | 28 +++++++++++++++------------- ietf/idrfc/testsREDESIGN.py | 2 +- ietf/submit/tests.py | 14 +++++++++++++- ietf/submit/utils.py | 5 +++++ 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/ietf/idrfc/expire.py b/ietf/idrfc/expire.py index 0c7e7607f..636d6fe2d 100644 --- a/ietf/idrfc/expire.py +++ b/ietf/idrfc/expire.py @@ -6,7 +6,7 @@ from django.db.models import Q import datetime, os, shutil, glob, re, itertools -from ietf.idtracker.models import InternetDraft, IDDates, IDStatus, IDState, DocumentComment, IDAuthor,WGChair +from ietf.idtracker.models import InternetDraft, IDDates, IDStatus, IDState, DocumentComment, IDAuthor, WGChair from ietf.utils.mail import send_mail, send_mail_subj from ietf.idrfc.utils import log_state_changed, add_document_comment from redesign.doc.models import Document, DocEvent, save_document_in_history, State @@ -154,7 +154,7 @@ def send_expire_notice_for_idREDESIGN(doc): def expire_id(doc): def move_file(f): - src = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, f) + src = os.path.join(settings.INTERNET_DRAFT_PATH, f) dst = os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, f) if os.path.exists(src): @@ -167,7 +167,7 @@ def expire_id(doc): new_revision = "%02d" % (int(doc.revision) + 1) - new_file = open(os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, "%s-%s.txt" % (doc.filename, new_revision)), 'w') + new_file = open(os.path.join(settings.INTERNET_DRAFT_PATH, "%s-%s.txt" % (doc.filename, new_revision)), 'w') txt = render_to_string("idrfc/expire_text.txt", dict(doc=doc, authors=[a.person.email() for a in doc.authors.all()], @@ -188,12 +188,9 @@ def expire_id(doc): add_document_comment(None, doc, "Document is expired by system") -def expire_idREDESIGN(doc): - system = Person.objects.get(name="(System)") - - # clean up files +def move_draft_files_to_archive(doc, rev): def move_file(f): - src = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, f) + src = os.path.join(settings.INTERNET_DRAFT_PATH, f) dst = os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, f) if os.path.exists(src): @@ -201,10 +198,15 @@ def expire_idREDESIGN(doc): file_types = ['txt', 'txt.p7s', 'ps', 'pdf'] for t in file_types: - move_file("%s-%s.%s" % (doc.name, doc.rev, t)) + move_file("%s-%s.%s" % (doc.name, rev, t)) + +def expire_idREDESIGN(doc): + # clean up files + move_draft_files_to_archive(doc, doc.rev) + + # change the state + system = Person.objects.get(name="(System)") - # now change the state - save_document_in_history(doc) if doc.latest_event(type='started_iesg_process'): dead_state = State.objects.get(type="draft-iesg", slug="dead") @@ -230,7 +232,7 @@ def clean_up_id_files(): """Move unidentified and old files out of the Internet Draft directory.""" cut_off = datetime.date.today() - datetime.timedelta(days=InternetDraft.DAYS_TO_EXPIRE) - pattern = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, "draft-*.*") + pattern = os.path.join(settings.INTERNET_DRAFT_PATH, "draft-*.*") files = [] filename_re = re.compile('^(.*)-(\d\d)$') @@ -290,7 +292,7 @@ def clean_up_id_filesREDESIGN(): """Move unidentified and old files out of the Internet Draft directory.""" cut_off = datetime.date.today() - pattern = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, "draft-*.*") + pattern = os.path.join(settings.INTERNET_DRAFT_PATH, "draft-*.*") files = [] filename_re = re.compile('^(.*)-(\d\d)$') diff --git a/ietf/idrfc/testsREDESIGN.py b/ietf/idrfc/testsREDESIGN.py index 829286d99..da73ef7c3 100644 --- a/ietf/idrfc/testsREDESIGN.py +++ b/ietf/idrfc/testsREDESIGN.py @@ -831,7 +831,7 @@ class ExpireIDsTestCase(django.test.TestCase): os.mkdir(os.path.join(self.archive_dir, "deleted_tombstones")) os.mkdir(os.path.join(self.archive_dir, "expired_without_tombstone")) - settings.IDSUBMIT_REPOSITORY_PATH = self.id_dir + settings.INTERNET_DRAFT_PATH = self.id_dir settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir def tearDown(self): diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py index 6fc3ac009..99e509792 100644 --- a/ietf/submit/tests.py +++ b/ietf/submit/tests.py @@ -26,11 +26,16 @@ class SubmitTestCase(django.test.TestCase): self.repository_dir = os.path.abspath("tmp-submit-repository-dir") os.mkdir(self.repository_dir) - settings.IDSUBMIT_REPOSITORY_PATH = self.repository_dir + settings.INTERNET_DRAFT_PATH = settings.IDSUBMIT_REPOSITORY_PATH = self.repository_dir + self.archive_dir = os.path.abspath("tmp-submit-archive-dir") + os.mkdir(self.archive_dir) + settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir + def tearDown(self): shutil.rmtree(self.staging_dir) shutil.rmtree(self.repository_dir) + shutil.rmtree(self.archive_dir) def do_submission(self, name, rev): # break early in case of missing configuration @@ -163,6 +168,11 @@ class SubmitTestCase(django.test.TestCase): name = draft.name rev = "%02d" % (int(draft.rev) + 1) + # write the old draft in a file so we can check it's moved away + old_rev = draft.rev + with open(os.path.join(self.repository_dir, "%s-%s.txt" % (name, old_rev)), 'w') as f: + f.write("a" * 2000) + supply_submitter_url = self.do_submission(name, rev) # supply submitter info, then we get a confirmation email @@ -202,6 +212,8 @@ class SubmitTestCase(django.test.TestCase): new_revision = draft.latest_event() self.assertEquals(new_revision.type, "new_revision") self.assertEquals(new_revision.by.name, "Test Name") + self.assertTrue(not os.path.exists(os.path.join(self.repository_dir, "%s-%s.txt" % (name, old_rev)))) + self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "%s-%s.txt" % (name, old_rev)))) self.assertTrue(not os.path.exists(os.path.join(self.staging_dir, u"%s-%s.txt" % (name, rev)))) self.assertTrue(os.path.exists(os.path.join(self.repository_dir, u"%s-%s.txt" % (name, rev)))) self.assertEquals(draft.type_id, "draft") diff --git a/ietf/submit/utils.py b/ietf/submit/utils.py index 4d165421f..933dfb6b9 100644 --- a/ietf/submit/utils.py +++ b/ietf/submit/utils.py @@ -100,6 +100,8 @@ def perform_postREDESIGN(request, submission): draft = Document(name=submission.filename) draft.intended_std_level = None + prev_rev = draft.rev + draft.type_id = "draft" draft.time = datetime.datetime.now() draft.title = submission.id_document_name @@ -144,6 +146,9 @@ def perform_postREDESIGN(request, submission): e.desc = "New revision available" e.save() + # clean up old files + from ietf.idrfc.expire import move_draft_files_to_archive + move_draft_files_to_archive(draft, prev_rev) # automatic state changes state_change_msg = ""