Private Repo on Pagure
One of my proposal for Pagure was to have private repositories. Private repositories are basically repositories which are visible to you and people you give permission to.
To be honest , I thought it would require a few tweaks and I will be good to go, but that wasn’t the case and the insights I got working on this feature was amazing. I fiddle with this project on primarily three stages. Each stage was a challenge in its own.
The three stages were:
- Database Query
The UI was suppose to have a checkbox saying “Private” and when a user ticks it the existing project becomes private or the new project is private from the time it is conceived.
Achieving this was a joy ride, with flask I just need to make changes in the form and setting page UI and Voilla!
I introduced a column Private in the project table and that was pretty much it. Nice and beautiful.
This was the most challenging part for me , since I have not worked with databases, and this was out of my comfort zone, I actually went back to my database basics to see if I am doing things right.
We in Pagure use Sqlalchemy as the ORM layer, ORM stands for object relation mapper. It basically use to map databases to object-class model of representing data. Sqlalchemy is a really powerful tool.
While figuring out ways to get all admins who can view private projects , I struggled a lot since I was working with a function which forms the core of Pagure so if things go wrong with this function the whole Project will take a hit.
So the challenge was to make minimum changes which are independent so that it doesn’t compromise the existing functionality and yet able to introduce a new one. I struggle to achieve it I failed a lot of time , was working hard to get it working , constantly moving to the board to figure out a solution on paper. Then switching back to my screen to code it out.
Finally after struggling a lot I got a very beautiful solution and done !
Just when I thought I am done , there comes a question of writing tests. Since I have altered a very major functionality that means I need to test every aspect of it.
Testing was a herculean task since I have not done a lot of testing, I actually got a lot to learn for starting the DB used for testing is a in-memory DB and not the one used by the app.
The session maintained has to be replicated in a way to use them in the test and how to use pygit to actually initialize a repo with git init and use it.
Towards the end of this PR my development evolve from writing code and testing it , to write the test and then introduce code or write code that pass the test. It has been really amazing working on this feature and hope it will be integrated soon.
I think may be a little more work is required on this feature maybe. It feels really amazing to do this work.
The link to the branch on Pagure.
The link to the current Pull-Request.