The Git Manager is a tool to act as a complete and convenient interface between various online repository hosting services and Processing, and to integrate the awesomeness of version control with Processing. It is meant to be able to provide not only all the offline features of Git, but also the power of collaboration and numerous other features that online repository hosting services brings to the table.
- To report a bug or request a feature not in the pipeline, please proceed here.
- A quick and (almost) complete to-do list of all features in the pipeline may be found here.
- The latest release can be downloaded from here.
- The complete source is available under the GNU-GPL here.
The tool is compatible with versions 3.011a and up. Here’s a quick screenshot of the tool explaining the various components:
- Platforms tested on: Windows 8.1, Ubuntu 14.04
- Last updated on: 24th July, 2015
The Complete Plan
The tool is far from done, and what is present in the Contributions Manager is just v0.2. Once the entire tool is done, here’s a quick overview of what it might look like:
Features, Components and Implementation details
Here is a list of the features that will be included in this project:
The interface will be intuitive, with a GUI similar to that of Processing. The entire interface will be done with classes in java.swing and java.awt.
The will be different “Levels of Expertise”, selectable from the “Expertise Level Menu”, and the image buttons shown in the Git Option Toolbar will vary based on the expertise level selected (much like how the toolbar buttons vary based on the mode in Processing). For example, while the “Novice” level will have an integrated “Snapshot” button, where all relevant files are added and committed in one go, the “Pro” level has separate add and commit buttons, where the user has to select which files to stage, and which of the staged files are to be committed. Further, things will often be simplified in the “Novice” level. For example, a “bring back to last commit state” will be provided, which is basically a git reset –hard. However, the “Pro” level will have a “git reset” option, where the various flags are presented to the user as a list from which (s)he can choose the appropriate context in which the reset is to be used.
There will also be an arrow to show the “Online Repo” popup menu, where the user can select the online repo which (s)he wants to work with. The options will be displayed as another toolbar with icon-buttons specific to the option the user has chosen, similar to the Git Option Toolbar, but below it.
In case the user isn’t comfortable with the toolbars, an option to hide all toolbars shall be provided. Note that all the operation that can be performed via a toolbar (and many more, not-so-frequently-used ones), will be available via the menu bar at the top.
Another important part of the UI is the Task Pane, found in the main body, below the toolbars. It will be used for convenient visualization of a number of things depending on the option selected by the user: status of the files and folders in the sketch, visualizations of file history, branches in existence, or the diffs of a particular file with respect to the last commit (or a commit before that).
Here’s the GUI mock-up of the tool:
The tool will permit a high level of customization. For example, while by default a repository will be made at the sketch level, users may choose to have it at the sketchbook level instead.
To make the interface visually appealing, I shall be using GIMP, particularly to design the icons of the buttons and the file’s status icons.
The following describes the code that’ll go behind the making of this tool:
- JGit library
This library will be used to provide all offline git-related services ( such as git add, git commit, git revert, git branch, etc.).
- GitHub Java API
This library, which makes using the GitHub API in java easy, will be used to provide GitHub specific features- for example, getting the details of a user’s GitHub Repository, forking a repository into the user’s GitHub account, etc.
- java.net package
The classes in this package (such as URL) will have to be extensively to use the BitBucket REST APIs and SourceForge APIs.
- Google Gson library
The Google Gson library will be used to parse data (which is in JSON format) that is accessed via the BitBucket REST and SourceForge APIs.
- BitBucket REST API
BitBucket REST APIs will be used to provide BitBucket features (like creating an issue in a repository, for example).
- SourceForge API
SourceForge APIs will be used to provide SourceForge-related features (such as details about a repository hosted on SourceForge).
- JGit library
Documentation is an essential part of this project, and will include not only documentation of the source-code and about how to use the tool, but also videos about the various features of this project, how to use them and what they stand for.
Note: A number of these ideas originated from a discussion with the Processing community. The thread can be found here.
Progress- 2014 Legacy
At present, a mock-up of the user interface has been completed, with the “Novice” toolbar visible, and the Expertise Level Menu and the Online Repo Menus displaying properly. Further, a few basic Git operations (git add, git commit, git init, git push, “snapshot”) are operational. A menu bar has been displayed, and is fairly filled up. Clicking on the GitHub icon in the Online Repo Menu, causes a GitHub repo (input by the user) to be forked into the user’s account, and clicking on the BitBucket icon displays the number of issues present in a repository selected by the user.