Skip to content

Commit 923239a

Browse files
committed
Clean up old draft files when submitting a new draft
- Legacy-Id: 3811
1 parent f49701c commit 923239a

4 files changed

Lines changed: 34 additions & 15 deletions

File tree

ietf/idrfc/expire.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import datetime, os, shutil, glob, re, itertools
88

9-
from ietf.idtracker.models import InternetDraft, IDDates, IDStatus, IDState, DocumentComment, IDAuthor,WGChair
9+
from ietf.idtracker.models import InternetDraft, IDDates, IDStatus, IDState, DocumentComment, IDAuthor, WGChair
1010
from ietf.utils.mail import send_mail, send_mail_subj
1111
from ietf.idrfc.utils import log_state_changed, add_document_comment
1212
from redesign.doc.models import Document, DocEvent, save_document_in_history, State
@@ -154,7 +154,7 @@ def send_expire_notice_for_idREDESIGN(doc):
154154

155155
def expire_id(doc):
156156
def move_file(f):
157-
src = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, f)
157+
src = os.path.join(settings.INTERNET_DRAFT_PATH, f)
158158
dst = os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, f)
159159

160160
if os.path.exists(src):
@@ -167,7 +167,7 @@ def move_file(f):
167167

168168
new_revision = "%02d" % (int(doc.revision) + 1)
169169

170-
new_file = open(os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, "%s-%s.txt" % (doc.filename, new_revision)), 'w')
170+
new_file = open(os.path.join(settings.INTERNET_DRAFT_PATH, "%s-%s.txt" % (doc.filename, new_revision)), 'w')
171171
txt = render_to_string("idrfc/expire_text.txt",
172172
dict(doc=doc,
173173
authors=[a.person.email() for a in doc.authors.all()],
@@ -188,23 +188,25 @@ def move_file(f):
188188

189189
add_document_comment(None, doc, "Document is expired by system")
190190

191-
def expire_idREDESIGN(doc):
192-
system = Person.objects.get(name="(System)")
193-
194-
# clean up files
191+
def move_draft_files_to_archive(doc, rev):
195192
def move_file(f):
196-
src = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, f)
193+
src = os.path.join(settings.INTERNET_DRAFT_PATH, f)
197194
dst = os.path.join(settings.INTERNET_DRAFT_ARCHIVE_DIR, f)
198195

199196
if os.path.exists(src):
200197
shutil.move(src, dst)
201198

202199
file_types = ['txt', 'txt.p7s', 'ps', 'pdf']
203200
for t in file_types:
204-
move_file("%s-%s.%s" % (doc.name, doc.rev, t))
201+
move_file("%s-%s.%s" % (doc.name, rev, t))
202+
203+
def expire_idREDESIGN(doc):
204+
# clean up files
205+
move_draft_files_to_archive(doc, doc.rev)
206+
207+
# change the state
208+
system = Person.objects.get(name="(System)")
205209

206-
# now change the state
207-
208210
save_document_in_history(doc)
209211
if doc.latest_event(type='started_iesg_process'):
210212
dead_state = State.objects.get(type="draft-iesg", slug="dead")
@@ -230,7 +232,7 @@ def clean_up_id_files():
230232
"""Move unidentified and old files out of the Internet Draft directory."""
231233
cut_off = datetime.date.today() - datetime.timedelta(days=InternetDraft.DAYS_TO_EXPIRE)
232234

233-
pattern = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, "draft-*.*")
235+
pattern = os.path.join(settings.INTERNET_DRAFT_PATH, "draft-*.*")
234236
files = []
235237
filename_re = re.compile('^(.*)-(\d\d)$')
236238

@@ -290,7 +292,7 @@ def clean_up_id_filesREDESIGN():
290292
"""Move unidentified and old files out of the Internet Draft directory."""
291293
cut_off = datetime.date.today()
292294

293-
pattern = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, "draft-*.*")
295+
pattern = os.path.join(settings.INTERNET_DRAFT_PATH, "draft-*.*")
294296
files = []
295297
filename_re = re.compile('^(.*)-(\d\d)$')
296298

ietf/idrfc/testsREDESIGN.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,7 @@ def setUp(self):
831831
os.mkdir(os.path.join(self.archive_dir, "deleted_tombstones"))
832832
os.mkdir(os.path.join(self.archive_dir, "expired_without_tombstone"))
833833

834-
settings.IDSUBMIT_REPOSITORY_PATH = self.id_dir
834+
settings.INTERNET_DRAFT_PATH = self.id_dir
835835
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir
836836

837837
def tearDown(self):

ietf/submit/tests.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,16 @@ def setUp(self):
2626

2727
self.repository_dir = os.path.abspath("tmp-submit-repository-dir")
2828
os.mkdir(self.repository_dir)
29-
settings.IDSUBMIT_REPOSITORY_PATH = self.repository_dir
29+
settings.INTERNET_DRAFT_PATH = settings.IDSUBMIT_REPOSITORY_PATH = self.repository_dir
3030

31+
self.archive_dir = os.path.abspath("tmp-submit-archive-dir")
32+
os.mkdir(self.archive_dir)
33+
settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir
34+
3135
def tearDown(self):
3236
shutil.rmtree(self.staging_dir)
3337
shutil.rmtree(self.repository_dir)
38+
shutil.rmtree(self.archive_dir)
3439

3540
def do_submission(self, name, rev):
3641
# break early in case of missing configuration
@@ -163,6 +168,11 @@ def test_submit_existing(self):
163168
name = draft.name
164169
rev = "%02d" % (int(draft.rev) + 1)
165170

171+
# write the old draft in a file so we can check it's moved away
172+
old_rev = draft.rev
173+
with open(os.path.join(self.repository_dir, "%s-%s.txt" % (name, old_rev)), 'w') as f:
174+
f.write("a" * 2000)
175+
166176
supply_submitter_url = self.do_submission(name, rev)
167177

168178
# supply submitter info, then we get a confirmation email
@@ -202,6 +212,8 @@ def test_submit_existing(self):
202212
new_revision = draft.latest_event()
203213
self.assertEquals(new_revision.type, "new_revision")
204214
self.assertEquals(new_revision.by.name, "Test Name")
215+
self.assertTrue(not os.path.exists(os.path.join(self.repository_dir, "%s-%s.txt" % (name, old_rev))))
216+
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "%s-%s.txt" % (name, old_rev))))
205217
self.assertTrue(not os.path.exists(os.path.join(self.staging_dir, u"%s-%s.txt" % (name, rev))))
206218
self.assertTrue(os.path.exists(os.path.join(self.repository_dir, u"%s-%s.txt" % (name, rev))))
207219
self.assertEquals(draft.type_id, "draft")

ietf/submit/utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ def perform_postREDESIGN(request, submission):
100100
draft = Document(name=submission.filename)
101101
draft.intended_std_level = None
102102

103+
prev_rev = draft.rev
104+
103105
draft.type_id = "draft"
104106
draft.time = datetime.datetime.now()
105107
draft.title = submission.id_document_name
@@ -144,6 +146,9 @@ def perform_postREDESIGN(request, submission):
144146
e.desc = "New revision available"
145147
e.save()
146148

149+
# clean up old files
150+
from ietf.idrfc.expire import move_draft_files_to_archive
151+
move_draft_files_to_archive(draft, prev_rev)
147152

148153
# automatic state changes
149154
state_change_msg = ""

0 commit comments

Comments
 (0)