- Features: extension for
git
to manage multiple repositories or git submodules. - Blazing-fast command line application written in
Java
and built on top of latest technologies:native image
from GraalVM to compile into machine code and run without JVM or JDK.- Java 21's Virtual Threads: lightweight threads that reduce the effort of writing, maintaining, and debugging high-throughput concurrent applications.
- Easy to use:
- The app is completely bundled into a standalone executable file, no extra dependencies needed.
- Add
.gis-modules
file if you need to manage multiple repos (not git submodules) - Run
gis -h
orgis <commands> -h
for help
(require docker/podman to build)
There are 2 GraalVM distributions: GraalVM CE and Mandrel. Since this app is written in Java completely, Mandrel is prefered.
cd gis
podman build -t gis . || return 1; podman create --name dkgis_ gis:latest; podman cp dkgis_:/app/gis/gis .; podman rm -f dkgis_
After the steps above, an executable file named gis
will be created under project directory.
podman build -t gis https://github.com/nqminhuit/gis.git
podman create --name gis_ gis:latest
podman cp gis_:/app/gis/gis .
podman rm -f gis_
cd gis
mvn clean verify package
The executable jar file will be created at target/gis-<version>.jar
java -agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=n -jar path/to/gis-<version>.jar
For more details, just run:
./gis --help
Generate completion for zsh:
./gis completion --directory ${fpath[1]}
Reload your zsh session, we can now press <TAB>
for autocomplete.
Currently gis only support zsh for completion.
Gis will read config from file at ~/.config/gis.config
Supported configs:
| key | description | default value |
|-------------------------+---------------------------------------------------------+---------------------|
| default_branches | comma separated values indicate default branch values | master,main,develop |
| feature_branch_prefixes | comma separated values indicate feature branch prefixes | feature/ |
Note: do NOT insert space into value part.
Don't:
master, main, develop
Do:
master,main,develop
example:
default_branches=master,main,develop
feature_branch_prefixes=feature/
The reason that value parsing is not that smart is because that we use default Java core package java.util.Properties
to parse values. We prefer Java's core over extra dependencies.
notes:
git submodule
commands do not take the root module into account, howevergis
does.- the data was generated on the same repository, same machine.
command for generating the above numbers:
for i in {1..1000}; do { time git submodule foreach git status -sb --ignore-submodules; } 2>> git_st_report done
# took 28s638ms in total
for i in {1..1000}; do { time gis st; } 2>> gis_st_report done
# took 13s654ms in total
command for generating the above numbers:
for i in {1..100}; do { time git submodule foreach git fetch; } 2>> git_fe_report done
# took 29m43s442ms
for i in {1..100}; do { time gis fe; } 2>> gis_fe_report done
# took 5m11s832ms
Use Sonarqube to analyze code:
podman run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9876:9000 docker.io/sonarqube:9.9.5-community
Then go to http://localhost:9876
- login (admin/admin), then change your password
- go to
http://localhost:9876/projects
and click "Add a project" - choose "Manually"
- input "Project key" and "Display name" e.g., "gis" then click "Set Up"
- "Generate a token": enter a name for this token then click "Generate"
- you will get something like this: 302481a5dee289283af983ac713174e2f2ed13da. Click "Continue"
- as shown in the 2nd step, with maven:
mvn sonar:sonar -Dsonar.projectKey=gis -Dsonar.host.url=http://localhost:9876 -Dsonar.login=302481a5dee289283af983ac713174e2f2ed13da
- after the maven command above succcess, you will have a dashboard about
gis
project
Performed automatically at: https://github.com/nqminhuit/gis-stress-test when:
- any changes to gis master branch: will perform stress test on small dataset
- when gis publishes a new release: will perform stress test on both small and large dataset