Architecture discussion #2
Labels
No Label
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: meta/mintee#2
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
How should this software work?
Some ideas:
pros of Unix users:
cons of Unix users:
pros of database:
cons of database:
Alternatively, we could assign directories to specific Unix users under
/srv/git
(like/srv/git/emma
) and they could manage that however they wanted that way.Me and Emma were brainstorming the other day and here are the highlights, plus some other details I've thought of in the meantime:
Aggressive modularization of the service
We can divide the system into functional modules (likely implemented as separate daemons), so that if one part experiences issues it doesn't cause a catastrophic failure of the entire system. For example, if the web UI went down, cloning/pushing to repositories could still work. This would be quite helpful for Go projects in particular, due to the way that Go modules work.
Store data using dirs/files
Doing this is more transparent than a database, and allows us to more easily edit the data by hand if something fails. Additionally, we get event subscription for free (i.e. inotify). This would allow the different parts of the service to communicate with each-other without needing much message passing IPC, if any at all. Git repositories are also implemented in a similar way and would fit into this system very cleanly.
Backwards compatibility
The whole gitea/forgejo indecent was caused by gitea upgrading the database in a way that forgejo could not understand. v1.0.0 needs to be stable, and we can't go restructuring data like that after we reach that version.
I want to allow anonymous users for sure
One proposed architecture: #4