├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── Procfile ├── README.markdown ├── commit.py ├── commit_messages.txt ├── index.html ├── requirements.txt ├── runtime.txt ├── static ├── .well-known │ ├── openapi.json │ └── openapi.yaml ├── favicon.ico ├── humans.txt └── robots.txt └── testing.py /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Rules For Contributing 2 | 3 | ## Sorting 4 | 5 | Don't bother sorting the file. Every now and then I'll sort and clean it up. 6 | 7 | ## License 8 | 9 | By contributing to this project, you agree to license your contributions as open source with the MIT license. 10 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:alpine 2 | WORKDIR /app 3 | COPY requirements.txt commit.py commit_messages.txt index.html /app/ 4 | COPY static /app/static/ 5 | RUN pip install --no-cache-dir -r requirements.txt 6 | CMD [ "python", "/app/commit.py" ] 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2010-2024 Nick Gerakines 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: python commit.py 2 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | # Looking For Sponsors 2 | 3 | Enjoying [https://whatthecommit.com/](https://whatthecommit.com/)? Consider becoming a sponsor of this project. Your contributions keep the site running. 4 | 5 | https://github.com/users/ngerakines/sponsorship 6 | 7 | # About WTC (What The Commit) 8 | 9 | Commitment is a small Tornado application that generates random commit messages. 10 | 11 | https://whatthecommit.com/ 12 | 13 | Commitment also provides https://whatthecommit.com/index.txt which provides plain text output. Some interesting usage for that can be: 14 | 15 | ``` 16 | git config --global alias.yolo '!git commit -m "$(curl -s https://whatthecommit.com/index.txt)"' 17 | ``` 18 | 19 | Or use one of the following VSCode Extensions: 20 | 21 | - [WhatTheCommit](https://marketplace.visualstudio.com/items?itemName=Gaardsholt.vscode-whatthecommit) 22 | - [yoloCommit](https://marketplace.visualstudio.com/items?itemName=JohnStilia.yolocommit) 23 | 24 | # License 25 | 26 | Copyright (c) 2010-2024 Nick Gerakines 27 | 28 | This project and its contents are open source under the MIT license. 29 | -------------------------------------------------------------------------------- /commit.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import os 3 | import random 4 | import re 5 | import json 6 | from typing import Dict, List, Optional, Set 7 | 8 | from hashlib import md5 9 | 10 | import tornado.web 11 | from tornado.escape import xhtml_unescape 12 | 13 | default_names = [ 14 | "Ali", 15 | "Andy", 16 | "April", 17 | "Brannon", 18 | "Chris", 19 | "Cord", 20 | "Dan", 21 | "Darren", 22 | "David", 23 | "Edy", 24 | "Ethan", 25 | "Fanny", 26 | "Gabe", 27 | "Ganesh", 28 | "Greg", 29 | "Guillaume", 30 | "James", 31 | "Jason", 32 | "Jay", 33 | "Jen", 34 | "John", 35 | "Kelan", 36 | "Kim", 37 | "Lauren", 38 | "Marcus", 39 | "Matt", 40 | "Matthias", 41 | "Mattie", 42 | "Mike", 43 | "Nate", 44 | "Nick", 45 | "Pasha", 46 | "Patrick", 47 | "Paul", 48 | "Preston", 49 | "Qi", 50 | "Rachel", 51 | "Rainer", 52 | "Randal", 53 | "Ryan", 54 | "Sarah", 55 | "Stephen", 56 | "Steve", 57 | "Steven", 58 | "Sunakshi", 59 | "Todd", 60 | "Tom", 61 | "Tony", 62 | ] 63 | 64 | num_re = re.compile(r"XNUM([0-9,]*)X") 65 | 66 | 67 | def fill_line(message: str, names: List[str]) -> str: 68 | message = message.replace("XNAMEX", random.choice(names)) 69 | message = message.replace("XUPPERNAMEX", random.choice(names).upper()) 70 | message = message.replace("XLOWERNAMEX", random.choice(names).lower()) 71 | 72 | nums = num_re.findall(message) 73 | 74 | while nums: 75 | start = 1 76 | end = 999 77 | value = nums.pop(0) or str(end) 78 | if "," in value: 79 | position = value.index(",") 80 | if position == 0: # XNUM,5X 81 | end = int(value[1:]) 82 | elif position == len(value) - 1: # XNUM5,X 83 | start = int(value[:position]) 84 | else: # XNUM1,5X 85 | start = int(value[:position]) 86 | end = int(value[position + 1 :]) 87 | else: 88 | end = int(value) 89 | if start > end: 90 | end = start * 2 91 | 92 | randint = random.randint(start, end) 93 | message = num_re.sub(str(randint), message, count=1) 94 | 95 | return message 96 | 97 | 98 | class MainHandler(tornado.web.RequestHandler): 99 | def initialize(self, messages: Dict[str, str], names: List[str]): 100 | self.messages = messages 101 | self.names = names 102 | 103 | def get(self, message_hash: Optional[str] = None): 104 | 105 | self.set_header("Access-Control-Allow-Origin", "*") 106 | self.set_header("Access-Control-Allow-Methods", "GET") 107 | self.set_header("Access-Control-Allow-Headers", "Origin,X-Requested-With,Content-Type,Accept") 108 | 109 | if message_hash is not None and message_hash not in self.messages: 110 | raise tornado.web.HTTPError(404) 111 | 112 | if message_hash is None: 113 | message_hash = random.choice(list(self.messages.keys())) 114 | 115 | message = fill_line(self.messages[message_hash], self.names) 116 | 117 | self.output_message(message, message_hash) 118 | 119 | def output_message(self, message, message_hash): 120 | self.set_header("X-Message-Hash", message_hash) 121 | self.render("index.html", message=message, message_hash=message_hash) 122 | 123 | 124 | class PlainTextHandler(MainHandler): 125 | def output_message(self, message, message_hash): 126 | self.set_header("Content-Type", "text/plain") 127 | self.set_header("X-Message-Hash", message_hash) 128 | self.write(xhtml_unescape(message).replace("
", "\n")) 129 | 130 | 131 | class JsonHandler(MainHandler): 132 | def output_message(self, message, message_hash): 133 | self.set_header("Content-Type", "application/json") 134 | self.set_header("X-Message-Hash", message_hash) 135 | self.write( 136 | json.dumps( 137 | { 138 | "hash": message_hash, 139 | "commit_message": message.replace("\n", ""), 140 | "permalink": f"{self.request.protocol}://{self.request.host}/{message_hash}", 141 | } 142 | ) 143 | ) 144 | 145 | 146 | class HumansHandler(tornado.web.RequestHandler): 147 | def get(self): 148 | self.set_header("Content-Type", "text/plain") 149 | self.write(self.humans_content) 150 | 151 | 152 | async def main(): 153 | humans_file = os.path.join(os.path.dirname(__file__), "static", "humans.txt") 154 | messages_file = os.path.join(os.path.dirname(__file__), "commit_messages.txt") 155 | messages: Dict[str, str] = {} 156 | 157 | with open(messages_file, "r", encoding="utf-8") as messages_input: 158 | for line in messages_input.readlines(): 159 | messages[md5(line.encode("utf-8")).hexdigest()] = line.rstrip() 160 | 161 | names: Set[str] = set(list(default_names)) 162 | 163 | with open(humans_file, "r", encoding="utf-8") as humans_input: 164 | humans_content = humans_input.read() 165 | for line in humans_content.split("\n"): 166 | if "Name:" in line: 167 | line = line.removeprefix("Name: ") 168 | if (found := line.find("github")) > -1: 169 | line = line[found:].removeprefix("github:").removesuffix(")") 170 | names.add(line.rstrip()) 171 | else: 172 | names.add(line.split(" ")[0]) 173 | 174 | settings = { 175 | "static_path": os.path.join(os.path.dirname(__file__), "static"), 176 | } 177 | values = {"messages": messages, "names": list(names)} 178 | application = tornado.web.Application( 179 | [ 180 | ( 181 | r"/(humans\.txt)", 182 | tornado.web.StaticFileHandler, 183 | dict(path=settings["static_path"]), 184 | ), 185 | ( 186 | r"/(\.well\-known/openapi\.(yaml|json))", 187 | tornado.web.StaticFileHandler, 188 | dict(path=settings["static_path"]), 189 | ), 190 | 191 | (r"/", MainHandler, values), 192 | (r"/([a-z0-9]+)", MainHandler, values), 193 | (r"/index\.json", JsonHandler, values), 194 | (r"/([a-z0-9]+)\.json", JsonHandler, values), 195 | (r"/([a-z0-9]+)/index\.json", JsonHandler, values), 196 | (r"/index\.txt", PlainTextHandler, values), 197 | (r"/([a-z0-9]+)/index\.txt", PlainTextHandler, values), 198 | (r"/([a-z0-9]+)\.txt", PlainTextHandler, values), 199 | ], 200 | **settings, 201 | ) 202 | application.listen(os.environ.get("PORT", 5000)) 203 | await asyncio.Event().wait() 204 | 205 | 206 | if __name__ == "__main__": 207 | asyncio.run(main()) 208 | -------------------------------------------------------------------------------- /commit_messages.txt: -------------------------------------------------------------------------------- 1 | ¯\_(ツ)_/¯ 2 | "Get that shit outta my master." 3 | #GrammarNazi 4 | $(init 0) 5 | $(rm -rvf .) 6 | (\ /)
(O.o)
(> <) Bunny approves these changes. 7 | (c) Microsoft 1988 8 | --help 9 | -m \'So I hear you like commits ...\' 10 | . 11 | ... 12 | /sigh 13 | 50/50 14 | 640K ought to be enough for anybody 15 | 8==========D 16 | :(:( 17 | :q! 18 | ??! what the ... 19 | [FIX] asdf 20 | A fix I believe, not like I tested or anything 21 | A full commitment's what I'm thinking of 22 | A long time ago, in a galaxy far far away... 23 | A tale of Dragons, Heroes and Legends... 24 | ALL SORTS OF THINGS 25 | Abandon all hope, ye who enter here. 26 | Actual final build before release 27 | Add Sandbox 28 | Added a banner to the default admin page. Please have mercy on me =( 29 | Added another dependency 30 | Added missing file in previous commit 31 | Added some NullPointerExceptions - Happy easter, you bastards! :D 32 | Added translation. 33 | All your codebase are belong to us. 34 | And a commit that I don't know the reason of... 35 | And if you ask me how I'm feeling 36 | And if thou'rt unwilling, then force I'll employ 37 | Another bug bites the dust 38 | Another commit to keep my CAN streak going. 39 | Apparently works-for-me is a crappy excuse. 40 | Argh! About to give up :( 41 | Arrrrgggg 42 | At times like this I wish I was a Garbage Man. 43 | Automate Accounting 44 | Batman! (this commit has no parents) 45 | Become a programmer, they said. It'll be fun, they said. 46 | Best commit ever 47 | Bet 48 | Bit Bucket is down. What should I do now? 49 | Blaming regex. 50 | By works, I meant 'doesnt work'. Works now.. 51 | COMMIT ALL THE FILES! 52 | Can someone review this commit, please ? 53 | Check next commit for message. 54 | Chuck Norris Emailed Me This Patch... I'm Not Going To Question It 55 | Code was clean until manager requested to fuck it up 56 | Commit committed 57 | Commit committed.... 58 | Committed some changes 59 | Committing fixes in the dark, seriously, who killed my power!? 60 | Committing in accordance with the prophecy. 61 | Completed with no bugs... 62 | Continued development... 63 | Copy pasta fail. still had a instead of a 64 | Copy-paste to fix previous copy-paste 65 | Corrected mistakes 66 | Crap. Tonight is raid night and I am already late. 67 | DEAL WITH IT 68 | DNS_PROBE_FINISHED_NXDOMAIN 69 | Definitely fixing a mistake Copilot made. Totally not mine. 70 | Deleted API file 71 | Derp 72 | Derp search/replace fuckup 73 | Derp, asset redirection in dev mode 74 | Derp. Fix missing constant post rename 75 | Derpy hooves 76 | Do things better, faster, stronger 77 | Does anyone read this? I'll be at the coffee shop accross the street. 78 | Does not work. 79 | Does this work 80 | Don't Ask Me, I Have No Idea Why This Works Either 81 | Don't push this commit 82 | Don't tell me you're too blind to see 83 | Done, to whoever merges this, good luck. 84 | Don’t even try to refactor it. 85 | Don’t mess with Voodoo 86 | Duh 87 | Easteregg 88 | Either Hot Shit or Total Bollocks 89 | Errare humanum est. 90 | FONDLED THE CODE 91 | FOR REAL. 92 | FUCKING XUPPERNAMEX 93 | Feed. You. Stuff. No time. 94 | Final commit, ready for tagging 95 | Fingers crossed! 96 | Finished fondling. 97 | First Blood 98 | Fix PC Load Letter Error 99 | Fix all errors, all errors on the WORLD!!!! 100 | Fix edge, single client, error case 101 | Fix hard-coded [object Object] string (thanks!) 102 | Fix my stupidness 103 | Fix the fixes 104 | Fixed Bug 105 | Fixed a bug cause XNAMEX said to 106 | Fixed a bug in NoteLineCount... not seriously... 107 | Fixed a little bug... 108 | Fixed compilation errors 109 | Fixed errors 110 | Fixed everything. 111 | Fixed mispeling 112 | Fixed so the code compiles 113 | Fixed some shit 114 | Fixed the build. 115 | Fixed the fuck out of #XNUMX! 116 | Fixed unnecessary bug. 117 | Fixed what was broken. 118 | Fixing XNAMEX's bug. 119 | Fixing XNAMEX's bugs. 120 | For great justice. 121 | For real, this time. 122 | For the sake of my sanity, just ignore this... 123 | For the statistics only 124 | Friday 5pm 125 | Fuck it, YOLO! 126 | Fucking egotistical bastard. adds expandtab to vimrc 127 | Fucking submodule bull shit 128 | Fucking templates. 129 | Future self, please forgive me and don't hit me with the baseball bat again! 130 | GIT :/ 131 | General commit (no IDs open) - Modifications for bad implementations 132 | Git wants e to commit, I want to sleep. Take me sweet void. 133 | Give me a break, it's 2am. But it works now. 134 | Glue. Match sticks. Paper. Build script! 135 | Gotta make you understand 136 | Gross hack because XNAMEX doesn't know how to code 137 | Handled a particular error. 138 | Haiyaa 139 | Here be Dragons 140 | Herp derp I left the debug in there and forgot to reset errors. 141 | Herpderp, shoulda check if it does really compile. 142 | Herping the derp 143 | Herping the derp derp (silly scoping error) 144 | Herping the fucking derp right here and now. 145 | Herpy dooves. 146 | Hide those navs, boi! 147 | Hiding API key hahaha 148 | How is the target directory over 100 gigs? 149 | I CAN HAZ COMMENTZ. 150 | I CAN HAZ PYTHON, I CAN HAZ INDENTS 151 | I __ a word 152 | I already said I was sorry 153 | I am Root. We are Root. 154 | I am Spartacus 155 | I am even stupider than I thought 156 | I am sorry 157 | I am the greatest javascript developer in the world. 158 | I can't believe it took so long to fix this. 159 | I cannot believe that it took this long to write a test for this. 160 | I did it for the lulz! 161 | I don't believe it 162 | I don't get paid enough for this shit. 163 | I don't give a damn 'bout my reputation 164 | I don't know what the hell I was thinking. 165 | I don't know what these changes are supposed to accomplish but somebody told me to make them. 166 | I don't know why. Just move on. 167 | I dont know what I am doing 168 | I expected something different. 169 | I forgot to commit... So here you go. 170 | I had a cup of tea and now it's fixed 171 | I hate this fucking language. 172 | I have no idea what I'm doing here. 173 | I have no idea what Copilot was doing there. 174 | I honestly wish I could remember what was going on here... 175 | I immediately regret this commit. 176 | I just evaluated random code in my console 177 | I just wanna tell you how I'm feeling 178 | I know what I am doing. Trust me. 179 | I know, I know, this is not how I’m supposed to do it, but I can't think of something better. 180 | I made leetle mistake 181 | I must enjoy torturing myself 182 | I must have been drunk. 183 | I must sleep... it's working... in just three hours... 184 | I only play the games that I win at. 185 | I really should've committed this when I finished it... 186 | I should get a raise for this. 187 | I should have had a V8 this morning. 188 | I think now it works 189 | I transformed a bug into a feature. Once you learn how, you'll never forget it 190 | I understand that it's an antipattern, but it's convenient. 191 | I was told to leave it alone, but I have this thing called OCD, you see 192 | I was wrong... 193 | I will not apologize for art. 194 | I will run 'terraform fmt' before committing. 195 | I will run 'cargo fmt' before committing. 196 | I will run 'go fmt' before committing. 197 | I would rather be playing Destiny 2. 198 | I would rather be playing Factorio. 199 | I would rather be playing Hell Divers 2. 200 | I would rather be playing No Man's Sky. 201 | I would rather be playing SC2. 202 | I'm always trying to show versatility. 203 | I'M PUSHING. 204 | I'll explain this when I'm sober .. or revert it 205 | I'll explain when you're older! 206 | I'll mention this again, if you're git-blaming this, don't come slap me personally. This code straight ported from another project and we WILL refactor this in the future. This is a temporary solution. OK I guess you can slap me for porting this as is, but still. 207 | I'm guessing this may start causing us problems either soon or never. 208 | I'm human 209 | I'm hungry 210 | I'm just a grunt. Don't blame me for this awful PoS. 211 | I'm just going to blame Copilot for that one. 212 | I'm pretty sure XNAMEX isn't real and they are just Copilot in a trench coat. 213 | I'm pretty sure XNAMEX isn't real and they are just 3 racoons in a trench coat. 214 | I'm sorry. 215 | I'm too foo for this bar 216 | I'm too old for this shit! 217 | I'm totally adding this to epic win. +300 218 | ID:10T Error 219 | IEize 220 | If it's hacky and you know it clap you hands (clap clap)! 221 | If it's stupid and it works, it ain't stupid 222 | Improvements 223 | Improving the fix 224 | Insert Commit Message Here 225 | Inside we both know what's been going on 226 | Is there an achievement for this? 227 | Is there an award for this? 228 | Issue #XNUM10X is now Issue #XNUM30X 229 | It Compiles! 50 Points For Gryffindor. 230 | It compiles! Ship it! 231 | It fucking compiles \:D/ 232 | It only compiles every XNUM2,5X tries... good luck. 233 | It was the best of times, it was the worst of times 234 | It worked for me... 235 | It works on my computer 236 | It works! 237 | It'd be nice if type errors caused the compiler to issue a type error 238 | It's 2016; why are we using ColdFusion?! 239 | It's Working! 240 | It's getting hard to keep up with the crap I've trashed 241 | It's possible! you can turn a 50-line code chunk into just 3 lines. Here's how 242 | It's secret! 243 | It's time to go home 244 | Just committing so I can go home 245 | Just stop reading these for a while, ok.. 246 | LAST time, XNAMEX, /dev/urandom IS NOT a variable name generator... 247 | LOL! 248 | LOTS of changes. period 249 | Landed. 250 | Last time I said it works? I was kidding. Try this. 251 | Locating the required gigapixels to render... 252 | Lock S-foils in attack position 253 | Love coding? here's the secret reason why 254 | Low On Caffeine, Please Forgive Coding Style 255 | Livin' off borrowed time, the clock ticks faster 256 | MOAR BIFURCATION 257 | Made it to compile... 258 | Major fixup. 259 | Make Sure You Are Square With Your God Before Trying To Merge This 260 | Make that it works in 90% of the cases. 3:30. 261 | Merge pull my finger request 262 | Merge pull request #67 from Lazersmoke/fix-andys-shit Fix andys shit 263 | Merging 'WIP: Do Not Merge This Branch' Into Master 264 | Merging the merge 265 | Minor updates 266 | Misc. fixes 267 | Mongo.db was empty, filled now with good stuff 268 | More ignore 269 | Moved something to somewhere... goodnight... 270 | My bad 271 | My boss forced me to build this feature... Pure shit. 272 | NOJIRA: No cry 273 | NSA backdoor - ignore 274 | Never Run This Commit As Root 275 | Never before had a small typo like this one caused so much damage. 276 | Never gonna give you up 277 | Never gonna give, never gonna give 278 | Never gonna let you down 279 | Never gonna make you cry 280 | Never gonna run around and desert you 281 | Never gonna say goodbye 282 | Never gonna tell a lie and hurt you 283 | Next time someone asks you how to fix an infinite loop, remember this commit 284 | Nitpicking about alphabetizing methods, minor OCD thing 285 | No cap 286 | No changes after this point. 287 | No changes made 288 | No time to commit.. My people need me! 289 | Nobody had ever created a function like this one before. 290 | Not one conflict, today was a good day. 291 | Not sure why 292 | Nothing to see here, move along 293 | Now added delete for real 294 | Now it's all microservices, I hope the fad persists. 295 | Now we tell you your browser sucks in your native tongue. 296 | Obligatory placeholder commit message 297 | Oh my god what year is it?! 298 | Oh no 299 | Oh thank god for Copilot 300 | Ok 301 | Ok, 5am, it works. For real. 302 | One day I'll actually start looking at what Copilot generates instead of just immediately pushing it. 303 | One does not simply merge into master 304 | One little whitespace gets its very own commit! Oh, life is so erratic! 305 | One more time, but with feeling. 306 | Only Tom Cruise knows why. 307 | Out for vacation... DONT YOU DARE TO CALL ME. 308 | PEBKAC 309 | Peopleware Chapter 8: "You Never Get Anything Done around Here between 9 and 5." 310 | Pig 311 | Pipeline goes brrrrrrr 312 | Please enter the commit message for your changes. Lines starting with '#' will be ignored, and an empty message aborts the commit. 313 | Please forgive me 314 | Please no changes this time. 315 | Please our Lord and Savior the Great Linter. 316 | Popping stash 317 | Pro Tip: Use Copilot more 318 | Pro Tip: Read Copilot output before pushing it 319 | Pro Tip: Double check XNAMEX's PRs 320 | Programming the flux capacitor 321 | Push poorly written test can down the road another ten years 322 | Put everything in its right place 323 | QuickFix. 324 | REALLY FUCKING FIXED 325 | Refactor factories, revisit visitors 326 | Refactored configuration. 327 | Reinventing the wheel. Again. 328 | Removed code. 329 | Removed test case since code didn't pass QA 330 | Removed the 2gb .hprof file from git history 331 | Removing unecessary stuff 332 | Replace all whitespaces with tabs. 333 | Reset error count between rows. herpderp 334 | Reticulating splines... 335 | Revert "fuckup". 336 | Revert "git please work" 337 | Revert "just testing, remember to revert" 338 | Revert this commit 339 | Riz 340 | Rush B! 341 | SEXY RUSSIAN CODES WAITING FOR YOU TO CALL 342 | SHIT ===> GOLD 343 | SOAP is a piece of shit 344 | Saint Pipeline, please give me the green light 345 | Same as last commit with changes 346 | See last commit 347 | Shit code! 348 | Shovelling coal into the server... 349 | So my boss wanted this button ... 350 | Some bugs fixed 351 | Some shit. 352 | Somebody set up us the bomb. 353 | Something fixed 354 | Spinning up the hamster... 355 | Still can't get this right... 356 | Stuff 357 | Switched off unit test XNUM15X because the build had to go out now and there was no time to fix it properly. 358 | TDD: 1, Me: 0 359 | TODO: Fix later 360 | TODO: Replace placeholder code 361 | TODO: Replace stubs 362 | TODO: Tell someone to implement this 363 | TODO: write meaningful commit message 364 | Test commit. Please ignore 365 | Testing in progress ;) 366 | Testing the test 367 | Thank god for Copilot 368 | That last commit was cringe 369 | That last commit message about silly mistakes pales in comparision to this one 370 | That's just how I roll 371 | The dog is eating my code 372 | The last time I tried this the monkey didn't survive. Let's hope it works better this time. 373 | The same thing we do every night, Pinky - try to take over the world! 374 | The universe is possible 375 | There's four sides to every story. 376 | They came from... Behind 377 | Things went wrong... 378 | This Is Why We Don't Push To Production On Fridays 379 | This branch is so dirty, even your mom can't clean it. 380 | This bug has driven lots of coders completely mad. You won't believe how it ended up being fixed 381 | This bunny should be killed. 382 | This changes nothing, don't look 383 | This commit is a lie 384 | This is a basic implementation that works. 385 | This is my code. My code is amazing. 386 | This is not a commit 387 | This is not the commit message you are looking for 388 | This is supposed to crash 389 | This is the last time we let XNAMEX commit ascii porn in the comments. 390 | This is where it all begins... 391 | This is why git rebase is a horrible horrible thing. 392 | This is why the cat shouldn't sit on my keyboard. 393 | This really should not take 19 minutes to build. 394 | This should work until december 2013. 395 | This solves it. 396 | This was the most stupid bug in the world, fixed in the smartest way ever 397 | This will definitely break in 20XNUM20,89X (TODO) 398 | To be honest, I do not quite remember everything I changed here today. But it is all good, I tell ya. 399 | To those I leave behind, good luck! 400 | Todo!!! 401 | Too lazy to write descriptive message 402 | Too tired to write descriptive message 403 | Transpiled mainframe. 404 | Trust me, I'm an engineer!... What the f*ck did just happened here? 405 | Trust me, it's not badly written. It's just way above your head. 406 | Trying to fake a conflict 407 | Ugh. Bad rebase. 408 | Undoing last comming 409 | Update .gitignore 410 | Update commit_messages.txt 411 | Updated 412 | Updated build targets. 413 | Updated framework to the lattest version 414 | Use a real JS construct, WTF knows why this works in chromium. 415 | Useful text 416 | Version control is awful 417 | WHO THE FUCK CAME UP WITH MAKE? 418 | WIP, always 419 | WIPTF 420 | WTF is this. 421 | We Had To Use Dark Magic To Make This Work 422 | We know the game and we're gonna play it 423 | We should delete this crap before shipping. 424 | We should get someone from Purdue to do this. They are the boilerplaters. 425 | We'll figure it out on Monday 426 | We're no strangers to love 427 | We've known each other for so long 428 | Well the book was obviously wrong. 429 | Well, it's doing something. 430 | What happens in vegas stays in vegas 431 | Whatever will be, will be 8{ 432 | Whatever. 433 | Whee, good night. 434 | Whee. 435 | Who Let the Bugs Out?? 436 | Who has two thumbs and remembers the rudiments of his linear algebra courses? Apparently, this guy. 437 | Who knows WTF?! 438 | Who knows... 439 | Why The Fuck? 440 | Working on WIP 441 | Working on tests (haha) 442 | Wubbalubbadubdub! 443 | XNAMEX broke the regex, lame 444 | XNAMEX is a savage 445 | XNAMEX is going to love this. 446 | XNAMEX is going to hate this. 447 | XNAMEX is on call, but here I am on Saturday fixing their shit. 448 | XNAMEX is savage 449 | XNAMEX made me do it 450 | XNAMEX needs to start reading Copilot output and not just push blindly. 451 | XNAMEX really fucked the couch on that one. 452 | XNAMEX rebase plx? 453 | XNAMEX sucks 454 | XUPPERNAMEX SUCKS 455 | XUPPERNAMEX, WE WENT OVER THIS. C++ IO SUCKS. 456 | XUPPERNAMEX, WE WENT OVER THIS. EXPANDTAB. 457 | XUPPERNAMEX, WE WENT OVER THIS. CHECK WHAT COPILOT PRODUCES FIRST. 458 | Yep, XNAMEX was right on this one. 459 | Yes, I was being sarcastic. 460 | You can't see it, but I'm making a very angry face right now 461 | You know the rules and so do I 462 | You should have trusted me. 463 | You wouldn't get this from any other guy 464 | Your commit is writing checks your merge can't cash. 465 | Your heart's been aching but you're too shy to say it 466 | [Insert your commit message here. Be sure to make it descriptive.] 467 | [no message] 468 | [skip ci] I'll fix the build monday 469 | _ 470 | a few bits tried to escape, but we caught them 471 | a lot of shit 472 | accidental commit 473 | add actual words 474 | add dirty scripts from the dark side of the universe 475 | added code 476 | added message 477 | added security. 478 | added some filthy stuff 479 | added super-widget 2.0. 480 | after of this commit remember do a git reset hard 481 | ajax-loader hotness, oh yeah 482 | and a comma 483 | and so the crazy refactoring process sees the sunlight after some months in the dark! 484 | another big bag of changes 485 | apparently i did something… 486 | arrgghh... damn this thing for not working. 487 | arrrggghhhhh fixed! 488 | asdfasdfasdfasdfasdfasdfadsf 489 | assorted changes 490 | bad things happen when you forget about that one little change you made ages ago 491 | bara bra grejjor 492 | better code 493 | better grepping 494 | better ignores 495 | betterer code 496 | bifurcation 497 | bla 498 | breathe, =, breathe 499 | buenas those-things. 500 | bug fix 501 | bugger 502 | bump to 0.0.3-dev:wq 503 | bumping poms 504 | c&p fail 505 | changed things... 506 | changes 507 | ci test 508 | clarify further the brokenness of C++. why the fuck are we using C++? 509 | commented out failing tests 510 | commit 511 | copy and paste is not a design pattern 512 | de-misunderestimating 513 | debug line test 514 | debug suff 515 | debugo 516 | derp, helper method rename 517 | derpherp 518 | diaaaaaazeeeeeeeeeepam 519 | did everything 520 | dirty hack, have a better idea ? 521 | does it work? maybe. will I check? no. 522 | doh. 523 | done. going to bed now. 524 | dope 525 | download half the damn internet to parse a pdf 526 | enabled ultra instinct 527 | epic 528 | eppic fail XNAMEX 529 | extra debug for stuff module 530 | f 531 | fail 532 | features 533 | ffs 534 | final commit. 535 | first blush 536 | fix 537 | fix /sigh 538 | fix bug, for realz 539 | fix some fucking errors 540 | fix tpyo 541 | fixed conflicts (LOL merge -s ours; push -f) 542 | fixed errors in the previous commit 543 | fixed mistaken bug 544 | fixed shit that havent been fixed in last commit 545 | fixed some minor stuff, might need some additional work. 546 | fix that damn sign!!! 547 | fixed the israeli-palestinian conflict 548 | fixes 549 | fixing project shit 550 | foo 551 | forgot a contact page woops haha 552 | forgot to save that file 553 | forgot we're not using a smart language 554 | formatted all 555 | freemasonry 556 | fuckup. 557 | gave up and used tables. 558 | giggle. 559 | git + ipynb = :( 560 | git please work 561 | git stash * 562 | god help us all 563 | grmbl 564 | grrrr 565 | hacky sack 566 | haha yes it works now 567 | happy monday _ bleh _ 568 | harharhar 569 | he knows. 570 | herpderp 571 | herpderp (redux) 572 | hey, look over there! 573 | hey, what's that over there?! 574 | hmmm 575 | holy shit it's functional 576 | hoo boy 577 | hopefully going to get a successful build got damn it 578 | i dunno, maybe this works 579 | i hid an easter egg in the code. can you find it? 580 | i need therapy 581 | i think i fixed a bug... 582 | if you're not using et, fuck off 583 | implemented missing semicolon 584 | improved function 585 | include shit 586 | increased loading time by a bit 587 | it is hump day _^_ 588 | it's friday 589 | jobs... steve jobs 590 | just checking if git is working properly... 591 | just shoot me 592 | just trolling the repo 593 | last hope failed, maybe now 594 | last minute fixes. 595 | less french words 596 | lets drink beer 597 | lol 598 | lol digg 599 | lolwhat? 600 | lots and lots of changes 601 | lots of changes after a lot of time 602 | magic, have no clue but it works 603 | making code less cancer 604 | making this thing actually usable. 605 | marks 606 | mergeconflix is the new hottest Gaul on the block 607 | mergederp 608 | minor changes 609 | more debug... who overwrote! 610 | more fixes 611 | more ignored words 612 | more ignores 613 | more stuff 614 | move your body every every body 615 | need another beer 616 | needs more cow bell 617 | omg what have I done? 618 | omgsosorry 619 | oops 620 | oops - thought I got that one. 621 | oops! 622 | oops, forgot to add the file 623 | oopsie B| 624 | pam anderson is going to love me. 625 | pay no attention to the man behind the curtain 626 | pep8 - cause I fell like doing a barrel roll 627 | pep8 fixer 628 | perfect... 629 | permanent hack, do not revert 630 | pgsql is being a pain 631 | pgsql is more strict, increase the hackiness up to 11 632 | pointless limitation 633 | pr is failing but merging anyways, because I am an admin 634 | project lead is allergic to changes... 635 | push fix 636 | pushed fix again 637 | pushing another fix 638 | put code that worked where the code that didn't used to be 639 | rats 640 | really ignore ignored worsd 641 | refuckulated the carbonator 642 | remove certain things and added stuff 643 | remove debug
all good 644 | removed echo and die statements, lolz. 645 | removed tests since i can't make them green 646 | removing unit tests 647 | restored deleted entities just to be sure 648 | s/ / /g 649 | s/import/include/ 650 | should get thru ci now 651 | should work I guess... 652 | should work now. 653 | small is a real HTML tag, who knew. 654 | some brief changes 655 | some stuff working haha 656 | somebody keeps erasing my changes. 657 | someday I gonna kill someone for this shit... 658 | someone fails and it isn't me 659 | sometimes you just herp the derp so hard it herpderps 660 | speling is difikult 661 | squash me 662 | starting the service is always better 663 | still trying to render a damn cube 664 | stopped caring XNUM8,23X commits ago 665 | stuff 666 | syntax 667 | tagging release w.t.f. 668 | that coulda been bad 669 | that's all folks 670 | the magic is real 671 | these confounded tests drive me nuts 672 | these guys are flipped 673 | things occurred 674 | third time's a charm 675 | this doesn't really make things faster, but I tried 676 | this is Spartaaaaaaaa 677 | this is how we generate our shit. 678 | this is my quickfix branch and i will use to do my quickfixes 679 | this is why docs are important 680 | this should fix it 681 | tl;dr 682 | totally more readable 683 | touched... 684 | try our sister game minceraft! 685 | trying to do something right! 686 | tunning 687 | typo 688 | uhhhhhh 689 | unh 690 | unionfind is no longer being molested. 691 | various changes 692 | well crap. 693 | what the hell happened here 694 | what is estonia up to now ... 695 | whatthecommit.com’s server IP address could not be found. 696 | who has two thumbs and is a genius? not this guy! 697 | who hurt you 698 | whooooooooooooooooooooooooooo 699 | why is everything broken 700 | wip 701 | woa!! this one was really HARD! 702 | work in progress 703 | workaround for ant being a pile of fail 704 | wrapping should work properly. Probably. 705 | yet another quality commit 706 | yo recipes 707 | yolo push 708 | you do wanna make me cry and i wanna say goodbye 709 |  - Temporary commit. 710 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Commit Message Generator 6 | 7 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
39 |

{% raw message %}

40 | 43 |
44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Tornado==6.4 2 | -------------------------------------------------------------------------------- /runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.9.5 2 | -------------------------------------------------------------------------------- /static/.well-known/openapi.json: -------------------------------------------------------------------------------- 1 | { 2 | "openapi": "3.0.0", 3 | "info": { 4 | "version": "1.0.0", 5 | "title": "What The Commit", 6 | "description": "A simple API to get random commit messages" 7 | }, 8 | "servers": [ 9 | { 10 | "url": "https://whatthecommit.com" 11 | } 12 | ], 13 | "paths": { 14 | "/index.json": { 15 | "get": { 16 | "description": "Returns a random commit message.", 17 | "responses": { 18 | "200": { 19 | "description": "Successful response", 20 | "content": { 21 | "application/json": { 22 | "schema": { 23 | "type": "object", 24 | "properties": { 25 | "hash": { 26 | "type": "string", 27 | "example": "0666a11c52b7786e994c483ad86bbe92" 28 | }, 29 | "commit_message": { 30 | "type": "string", 31 | "example": "TODO: write meaningful commit message" 32 | }, 33 | "permalink": { 34 | "type": "string", 35 | "example": "https://whatthecommit.com/0666a11c52b7786e994c483ad86bbe92" 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /static/.well-known/openapi.yaml: -------------------------------------------------------------------------------- 1 | openapi: 3.0.0 2 | info: 3 | version: 1.0.0 4 | title: What The Commit 5 | description: A simple API to get random commit messages 6 | servers: 7 | - url: https://whatthecommit.com 8 | paths: 9 | '/index.json': 10 | get: 11 | description: Returns a random commit message. 12 | responses: 13 | '200': 14 | description: Successful response 15 | content: 16 | application/json: 17 | schema: 18 | type: object 19 | properties: 20 | hash: 21 | type: string 22 | example: "0666a11c52b7786e994c483ad86bbe92" 23 | commit_message: 24 | type: string 25 | example: "TODO: write meaningful commit message" 26 | permalink: 27 | type: string 28 | example: "https://whatthecommit.com/0666a11c52b7786e994c483ad86bbe92" 29 | -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngerakines/commitment/af652be141a96b9d6f61c92ba37ed35e5c7ddc98/static/favicon.ico -------------------------------------------------------------------------------- /static/humans.txt: -------------------------------------------------------------------------------- 1 | /* TEAM */ 2 | Developer: Nick Gerakines 3 | Site: http://ngerakines.me/ 4 | ATProtocol: @ngerakines.me 5 | Location: Dayton, OH 6 | 7 | /* THANKS */ 8 | Name: github:JKtheSlacker 9 | Name: github:goj 10 | Name: github:tomekwojcik 11 | Name: github:lupomontero 12 | Name: github:foutrelis 13 | Name: github:minimal 14 | Name: github:loginx 15 | Name: github:coopermaruyama 16 | Name: Xavier Spriet 17 | Name: Pat Notz 18 | Name: github:makerbot 19 | Name: github:htroyack 20 | Name: Pulkit Kathuria 21 | Name: github:serjoscha87 22 | Name: Hanlle Nicolás 23 | Name: Ryan Peck 24 | Name: Douglas Campos 25 | Name: github:wickedOne 26 | Name: Dimitris Baltas 27 | Name: Thomas Rausch 28 | Name: Michael Dougherty 29 | Name: Noval Agung Prayogo (github:novalagung) 30 | Name: Wahyu Kristianto (github:kristories) 31 | Name: Lukasz 32 | Name: Jon Raphaelson 33 | Name: Michael Babker 34 | Name: github:javiermon 35 | Name: Masahiro Honma 36 | Name: Corey Quinn 37 | Name: Kevin Bongart 38 | Name: github:Rebell 39 | Name: Chris Rowe 40 | Name: Warun Kietduriyakul 41 | Name: github:mipearson 42 | Name: Alex (github:Qwertylex) 43 | Name: Nate Eagleson 44 | Name: Igor Galić 45 | Name: Eric Boh 46 | Name: Lukas Stampf 47 | Name: Jonathan Rouillard 48 | Name: Robert Gründler 49 | Name: AJ Henriques (github:ajhenriques) 50 | Name: Maciej Orliński (github:originalnick) 51 | Name: David Turenne (github:Ociidii-Works) 52 | Name: Sepehr Lajevardi (github:sepehr) 53 | Name: Jefferson Daniel (github:jdsolucoes) 54 | Name: Jiang Chen (github:JC6) 55 | Name: Pascal Querner (github:pquerner) 56 | Name: github:L1NT 57 | Name: Shubham Chaudhary (github:shubhamchaudhary) 58 | Name: Lyntor Paul Figueroa (github:KazeFlame) 59 | Name: Wade Urry (github:iWader) 60 | Name: Jan Raasch (github:janraasch) 61 | Name: Fabian Met (github:Rackor3000) 62 | Name: Rupert Rutland (github:rupertrutland) 63 | Name: Florian Beer (github:florianbeer) 64 | Name: Alashov Berkeli (github:alashow) 65 | Name: Stefano Baghino (github:stefanobaghino) 66 | Name: Wes Lindsay (github:weslindsay) 67 | Name: Alex Zhu (github:azhu2) 68 | Name: github:opatut 69 | Name: Simone Picciani (github:zanza00) 70 | Name: github:cube5 71 | Name: J (github:jucke) 72 | Name: James Robert Perih (github:hotdang-ca) 73 | Name: Igor Santos (github:igorsantos07) 74 | Name: Jordan Finnigan (github:JadoJodo) 75 | Name: Christian Froehler (github:generatorr) 76 | Name: Fabian Kochem (github:vortec) 77 | Name: Gustavo de León (github:bestgustavo30) 78 | Name: Alex Mayer (github:amayer5125) 79 | Name: Ahmad Samiei (github:amad) 80 | Name: Shaun Hammill (github:Plloi) 81 | Name: github:KneeNinetySeven 82 | Name: Rafael Reis (github:reisraff) 83 | Name: github:ShanTulshi 84 | Name: Jonatha Daguerre (github:jonathadv) 85 | 86 | /* SITE */ 87 | Last update: 2024-08-04 88 | Standards: HTML5, CSS3 89 | Software: Git, Python, Visual Studio Code 90 | 91 | /* SOURCE */ 92 | Source: https://github.com/ngerakines/commitment 93 | License: MIT 94 | -------------------------------------------------------------------------------- /static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / -------------------------------------------------------------------------------- /testing.py: -------------------------------------------------------------------------------- 1 | import random 2 | import re 3 | import os 4 | import sys 5 | 6 | messages = open("commit_messages.txt").read().split('\n') 7 | 8 | humans = open("static/humans.txt").read().split('\n') 9 | 10 | names = ['Nick', 'Steve', 'Andy', 'Qi', 'Fanny', 'Sarah', 'Cord', 'Todd', 11 | 'Chris', 'Pasha', 'Gabe', 'Tony', 'Jason', 'Randal', 'Ali', 'Kim', 12 | 'Rainer', 'Guillaume', 'Kelan', 'David', 'John', 'Stephen', 'Tom', 'Steven', 13 | 'Jen', 'Marcus', 'Edy', 'Rachel'] 14 | 15 | humans_file = os.path.join(os.path.dirname(__file__), 'static', 'humans.txt') 16 | 17 | for line in open(humans_file).readlines(): 18 | if "Name:" in line: 19 | data = line[6:].rstrip() 20 | if (data.find("github:") == 0): 21 | names.append(data[7:]) 22 | else: 23 | names.append(data.split(" ")[0]) 24 | 25 | num_re = re.compile(r"XNUM([0-9,]*)X") 26 | 27 | def fill_line(message): 28 | message = message.replace('XNAMEX', random.choice(names)) 29 | message = message.replace('XUPPERNAMEX', random.choice(names).upper()) 30 | message = message.replace('XLOWERNAMEX', random.choice(names).lower()) 31 | 32 | nums = num_re.findall(message) 33 | 34 | while nums: 35 | start = 1 36 | end = 999 37 | value = nums.pop(0) or str(end) 38 | if "," in value: 39 | position = value.index(",") 40 | if position == 0: # XNUM,5X 41 | end = int(value[1:]) 42 | elif position == len(value) - 1: # XNUM5,X 43 | start = int(value[:position]) 44 | else: # XNUM1,5X 45 | start = int(value[:position]) 46 | end = int(value[position+1:]) 47 | else: 48 | end = int(value) 49 | if start > end: 50 | end = start * 2 51 | 52 | randint = random.randint(start, end) 53 | message = num_re.sub(str(randint), message, count=1) 54 | 55 | return message 56 | 57 | def get(message=None): 58 | return fill_line(message or random.choice(messages)) 59 | 60 | if __name__ == '__main__': 61 | print(get(sys.argv[1] or None)) 62 | --------------------------------------------------------------------------------