# GitLab Project Manager ## Purpose The goal of this utility is to provide a fuzzy-find method of locating, cloning, and using GitLab projects -- along with your preferred aliases, autocompletion, and shortcuts. ## Functionality Fuzzy as F_ck. This program will try like hell to help you find a project, and once you've found it, will remember your preference along with whatever crazy thing your lizard brain wants to call it. Do you think of a project called terraform as infra-stuff? No problem, just let gpm know that and it'll remember. The basic workflow looks like this: 1. **Cache** -- load your cache to make things super quick - project cache has a TTL, or you can load it manually - you only need to update it if there are new projects the cache is unaware of 2. **Add** -- find your project, give it any extra aliases you want - run `gpm project add` (or `padd` if using the provided shell defaults) 3. **Go** -- go to your project, fuzzy searching by alias - clones your project if that's never been done - the provided `pgo` func makes it easy 4. **Open** -- rather than simply changing directories to a project, open it in your IDE 5. **Manage** -- fine-tune your aliases, making it easy to nail them without fuzzy stuff - if you are lazy in your aliases, you'll be fuzzy finding a lot - match your alias exactly (or have only one result) and you go there right away - positive reinforcement given for solid alias behavior - manage aliases using `gpm alias add` or `gpm alias delete` 6. **List** -- get a list of your configured projects any time with `plist` 7. **Reward** -- buy the author a beer, because this thing is a time saver ## TODO - [ ] Fix NPE when cache is reset or project for whatever reason leaves an orphaned alias - [ ] Add config setters and getters - [ ] Add TTL check to cache load, and add -f / --force flag to re-build regardless - [ ] For each project loaded, check if it is the same, and do nothing - [ ] prevents clobbering cache on a partial update - [ ] track already loaded projects to diff after load - [ ] should prune missing after the load is complete - [ ] Add open command - [ ] config should exist for editor (vim, code, etc..) - [ ] Update README for shell completion, aliases, usage - [ ] Make a Makefile - [ ] Add git repo status to project go (up-to-date, pending commits, etc..) - [x] Merge aliases together for same project when selecting - [ ] If after merging there is only one project, go there by default