{"action":"created","issue":{"url":"https://api.github.com/repos/macgitver/MacGitver/issues/27","labels_url":"https://api.github.com/repos/macgitver/MacGitver/issues/27/labels{/name}","comments_url":"https://api.github.com/repos/macgitver/MacGitver/issues/27/comments","events_url":"https://api.github.com/repos/macgitver/MacGitver/issues/27/events","html_url":"https://github.com/macgitver/MacGitver/pull/27","id":63469634,"number":27,"title":"Modernise the Repository Manager","user":{"login":"scunz","id":1700771,"avatar_url":"https://avatars.githubusercontent.com/u/1700771?v=3","gravatar_id":"","url":"https://api.github.com/users/scunz","html_url":"https://github.com/scunz","followers_url":"https://api.github.com/users/scunz/followers","following_url":"https://api.github.com/users/scunz/following{/other_user}","gists_url":"https://api.github.com/users/scunz/gists{/gist_id}","starred_url":"https://api.github.com/users/scunz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scunz/subscriptions","organizations_url":"https://api.github.com/users/scunz/orgs","repos_url":"https://api.github.com/users/scunz/repos","events_url":"https://api.github.com/users/scunz/events{/privacy}","received_events_url":"https://api.github.com/users/scunz/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":10,"created_at":"2015-03-22T00:17:39Z","updated_at":"2015-06-01T21:10:49Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/macgitver/MacGitver/pulls/27","html_url":"https://github.com/macgitver/MacGitver/pull/27","diff_url":"https://github.com/macgitver/MacGitver/pull/27.diff","patch_url":"https://github.com/macgitver/MacGitver/pull/27.patch"},"body":"Okay, this is not going to become a two hour hack. It's about adjusting the RepoMan to almost 2 years of thinking about it - and that was quite a bit. Thus, we need a new logic to tackle the progress here. What I'd like to see is the following workflow:\r\n\r\n- We declare `development` to be in maintenance mode. (Thus, we might actually fix things that we find there unless we already know it clashes with the changes herein - This might be worth just for a few days). So, that `development` is buildable and runnable.\r\n- We declare `repoman` to be a feature branch. I imagine that this could work like: While @scunz is doing the basic refactoring, @antis81 might be doing tiny cleanups in the `development` branch (i.e. remove views like the `RemoteView` that are never used; basically gaining a very deep inside knowledge of what code we currently have, what is used (remove everything else)).\r\n- During this first phase, `repoman` will be constantly rebased to live on top of `development`. Every change in `repoman` that is cosmetic or otherwise unrelated to the conceptional change _will_ be upstreamed to `development` asap.\r\n- The end of this Phase I will be a state where we'll have a working RepoMan, but a dysfunctional application.\r\n- This is where Phase II jumps in. By that time we'll hopefully have identified lots of dead code and eliminated it from both branches.\r\n- Now, we can implement all the services and adjust the (by then probably disabled) code to use them.\r\n- Once we're on the same level in `development` and `repoman`, we can merge it and take it from there.\r\n\r\nSo, what this is going to bring, will be:\r\n\r\n- [ ] Split RepoMan logically into a front end and a backend. While the backend will be running in a behind-the-scenes thread, the frontend will be accessible to the rest of the application. Thus, any git activity has to be done inside the RepoMan.\r\n\r\n- [ ] Create an event system that can be used across thread boundaries.\r\n\r\n- [x] Turn the frontend classes (the `RM:Base` derivates) into __disposable__ and short-lived objects.\r\n\r\n- [x] Turn the data classes (previously `RM::Internal::BasePrivate`) into reference countable dumb data containers\r\n\r\n- [x] Remove any `QObject` mechanics from the frontend.\r\n\r\n- [x] Create an abstract `RM::Service` and a `RM::ServiceRunner` (which will actually be _the_ backend).\r\n\r\n- [ ] Move the refresh logic into a `RM::Service`. This service will be the only module that is allowed to create new data objects.\r\n\r\n- [ ] Ensure that the front end is _not_ leaking any `libGitWrap` objects through its interface\r\n\r\n- [ ] Implement the required services to accomplish the missions that we've already implemented:\r\n\r\n    - [ ] `RMDiffGenerator` - A `RM::Service` that produces `libDiffView` models of diffs. `libDiffViews` is actually a good abstraction here already, so that we can reuse the Adaptor patterns we have in place.\r\n\r\n    - [ ] `RMHistoryGenerator` - A `RM::Service` that produces a model suitable to display the repository's history. We currently depend very highly on GitWrap inside the history module. This is a problem. We'll have to extract that code into a real model with no data access and write 2 adaptors to it. The first adaptor will later become the bespoken `RMHistoryGeneratorService`. The other one would be the `RMHistoryFetchDetailService`. Extracting that model and the service logic from the history module is a task that can be done independent of the progress in `repoman` branch; i.e. when `repoman` has reached a minimum stable interface, one of us can branch off the `repoman` branch and do this.\r\n\r\n    - [ ] `RMHistoryFetchDetail` - a very short running `RM::Service` that will query the details for a given commit and report it back into the history model.\r\n\r\n    - [ ] `RM::Services::CreateTag`\r\n    \r\n    - [ ] `RM::Services::CreateBranch`\r\n    \r\n    - [ ] `RM::Services::DeleteBranch`\r\n    \r\n    - [ ] `RM::Services::DeleteTag`\r\n    \r\n    - [ ] `RM::Services::MoveBranch`\r\n    \r\n    - [ ] `RM::Services::RemoteFetch`\r\n    \r\n    - [ ] `RM::Sercices::RemotePush`\r\n\r\nBasically, this is finally about \"doing it right\" and to stop beating around the bush :)"},"comment":{"url":"https://api.github.com/repos/macgitver/MacGitver/issues/comments/107713428","html_url":"https://github.com/macgitver/MacGitver/pull/27#issuecomment-107713428","issue_url":"https://api.github.com/repos/macgitver/MacGitver/issues/27","id":107713428,"user":{"login":"antis81","id":440517,"avatar_url":"https://avatars.githubusercontent.com/u/440517?v=3","gravatar_id":"","url":"https://api.github.com/users/antis81","html_url":"https://github.com/antis81","followers_url":"https://api.github.com/users/antis81/followers","following_url":"https://api.github.com/users/antis81/following{/other_user}","gists_url":"https://api.github.com/users/antis81/gists{/gist_id}","starred_url":"https://api.github.com/users/antis81/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/antis81/subscriptions","organizations_url":"https://api.github.com/users/antis81/orgs","repos_url":"https://api.github.com/users/antis81/repos","events_url":"https://api.github.com/users/antis81/events{/privacy}","received_events_url":"https://api.github.com/users/antis81/received_events","type":"User","site_admin":false},"created_at":"2015-06-01T21:10:49Z","updated_at":"2015-06-01T21:10:49Z","body":">Now, going to get this compile again; bit by bit...\r\n\r\nDo you think you can get this done first? As of now, we cannot proceed with the `libActivities` stuff and rebasing comes close to impossible."}}