}
def wordcount_at_this_sha():
- result = subprocess.run("wc -w content/drafts/blanchards-dangerous-idea-and-the-plight-of-the-lucid-crossdreamer.md content/drafts/a-hill-of-validity-in-defense-of-meaning.md content/drafts/if-clarity-seems-like-death-to-them.md content/drafts/agreeing-with-stalin-in-ways-that-exhibit-generally-rationalist-principles.md".split(), stdout=subprocess.PIPE)
+ result = subprocess.run("wc -w content/drafts/blanchards-dangerous-idea-and-the-plight-of-the-lucid-crossdreamer.md content/drafts/a-hill-of-validity-in-defense-of-meaning.md content/drafts/if-clarity-seems-like-death-to-them.md content/drafts/agreeing-with-stalin-in-ways-that-exhibit-generally-rationalist-principles.md content/drafts/standing-under-the-same-sky.md".split(), stdout=subprocess.PIPE)
wc_lines = result.stdout.decode('utf8').split('\n')
total_line = wc_lines[-2] # last line is empty
return int(total_line.split()[0])
wordcounts = []
keep_going = True
while keep_going:
- subprocess.run(["git", "checkout", "HEAD~10"])
+ subprocess.run(["git", "checkout", "HEAD~1"])
wordcount = wordcount_at_this_sha()
date = date_at_this_sha()
- if date < datetime.date(2022, 4, 1):
+ if date < datetime.date(2022, 4, 20):
keep_going = False
wordcounts.append((date, wordcount))
+ # don't leave the head detached
+ subprocess.run(["git", "checkout", "master"])
return sorted(wordcounts)
+def normalize_dates(wordcounts):
+ eod_wordcounts = []
+ for i in range(len(wordcounts)-1):
+ date, wordcount = wordcounts[i]
+ next_date, next_wordcount = wordcounts[i+1]
+ gap = next_date - date
+ if gap >= datetime.timedelta(1):
+ eod_wordcounts.append((date, wordcount))
+ for i in range(gap.days-1):
+ eod_wordcounts.append((date + datetime.timedelta(i+1), wordcount))
+ return eod_wordcounts
def write_csv(wordcounts):
with open("memoir_wordcounts.csv", 'w') as f:
if __name__ in "__main__":
- wordcounts = look_back()
+ wordcounts = normalize_dates(look_back())
write_csv(wordcounts)