Skip to content

Commit

Permalink
Merge commit '46c76dd7071bedab192aa65756ba09024e29da0c'
Browse files Browse the repository at this point in the history
  • Loading branch information
romkatv committed May 13, 2020
2 parents d0f6cd0 + 46c76dd commit 1f8bd78
Showing 1 changed file with 61 additions and 25 deletions.
86 changes: 61 additions & 25 deletions gitstatus/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -468,45 +468,81 @@ this case you'll need to rebuild.

### Compiling for distribution

If you want to package gitstatus, it's best to do it based off releases. You also probably don't
want to build in docker (`-d docker`) or to allow automatic downloading of libgit2 tarballs (`-w`).
If you want to package gitstatus, it's best to do it based off [releases](
https://github.com/romkatv/gitstatus/releases).

The following code should work. If it doesn't, please open an issue.
The following code should work without patching anything in gitstatus sources. If it doesn't, please
open an issue.

**IMPORTANT:** *Change version to what you want to package. This example doesn't get updated when
new versions are released.*

```zsh
curl -fsSLO https://github.com/romkatv/gitstatus/archive/v1.0.0.tar.gz
tar -xzf v1.0.0.tar.gz
cd gitstatus-1.0.0
(
. ./build.info
curl -fsSLo \
deps/libgit2-"$libgit2_version".tar.gz \
https://github.com/romkatv/libgit2/archive/"$libgit2_version".tar.gz
)
./build
rm deps/libgit2-*.tar.gz
# Download and extract gitstatus tarball.
gitstatus_version=1.0.0 # IMPORTANT: CHANGE VERSION TO WHAT YOU WANT
wget https://github.com/romkatv/gitstatus/archive/v"$gitstatus_version".tar.gz
tar -xzf v"$gitstatus_version".tar.gz
cd gitstatus-"$gitstatus_version"

# Download libgit2 tarball and compile gitstatusd.
./build -w

# Post-process.
rm ./deps/libgit2-*.tar.gz
for file in *.zsh install; do
zsh -fc "emulate zsh -o no_aliases && zcompile -R -- $file.zwc $file"
done
```

This needs binutils, cmake, gcc, g++, git, GNU make and zsh.

Depending on your workflow, it might be easier to store the URL to the libgit2 tarball in the
same place where you are going to put the main gitstatus tarball URL. You'll need to update both
URLs at the same time when bumping package version.
This needs binutils, cmake, gcc, g++, git, GNU make, wget, zsh and either shasum or sha256sum.

Once build completes, *do not delete or move any files*. Package the whole directory as is. Don't
add it (or any of its subdirectories) to `PATH`.
add the directory or any of its subdirectories to `PATH`.

You probably don't want to build in docker, so don't pass `-d` to `./build`.

gitstatus depends on a [custom fork of libgit2](https://github.com/romkatv/libgit2/). When you run
`./build -w`, it'll automatically download the appropriate libgit2 tarball and verify its sha256.
If you want to separate the downloading of source tarballs from compilation, you can download the
libgit2 tarball manually and invoke `./build` without `-w`.

```zsh
# Download and extract gitstatus tarball.
gitstatus_version=1.0.0 # IMPORTANT: CHANGE VERSION TO WHAT YOU WANT
wget https://github.com/romkatv/gitstatus/archive/v"$gitstatus_version".tar.gz
tar -xzf v"$gitstatus_version".tar.gz
cd gitstatus-"$gitstatus_version"

# Download libgit2 tarball and place it where ./build expects it.
. ./build.info
libgit2_path=./deps/libgit2-"$libgit2_version".tar.gz
libgit2_url=https://github.com/romkatv/libgit2/archive/"$libgit2_version".tar.gz
wget -O "$libgit2_path" "$libgit2_url"

# Compile gitstatusd.
./build

# Post-process.
rm ./deps/libgit2-*.tar.gz
for file in *.zsh install; do
zsh -fc "emulate zsh -o no_aliases && zcompile -R -- $file.zwc $file"
done
```

Note that Powerlevel10k has an embedded version of gitstatus. It must stay that way. The embedded
gitstatus won't conflict with the standalone version. They can have different versions and can
coexist within the same Zsh process. Do not attempt to surgically remove gitstatus from
Powerlevel10k, package the result and then somehow force Powerlevel10k to use a separately packaged
gitstatus.
Note that the URL and the content of the libgit2 tarball are fully defined by the main gitstatus
tarball. Thus, you can set URLs and sha256 checksums of the two tarball in the same place (package
definition) and update them at the same time when bumping package version. In other words, you don't
have to extract `libgit2_version` programmatically. You can manually copy it from [build.info](
https://github.com/romkatv/gitstatus/blob/master/build.info) to your package definition, if you
prefer.

[Powerlevel10k](https://github.com/romkatv/powerlevel10k) has an embedded version of gitstatus. It
must stay that way. If you decide to package both of them, follow the respective instructions from
each project. The embedded gitstatus in Powerlevel10k won't conflict with the standalone gitstatus.
They can have different versions and can coexist within the same Zsh process. Do not attempt to
surgically remove gitstatus from Powerlevel10k, package the result and then force Powerlevel10k to
use a separately packaged gitstatus. Instead, treat Powerlevel10k and gitstatus as independent
projects that don't depend on each other.

## License

Expand Down

0 comments on commit 1f8bd78

Please sign in to comment.