2017-11-23 20:21:57 +01:00
|
|
|
# Zulip-specific tools
|
|
|
|
|
2017-11-26 18:14:28 +01:00
|
|
|
This article documents several useful tools that can save you a lot of
|
|
|
|
time when working with Git on the Zulip project.
|
2017-11-23 20:21:57 +01:00
|
|
|
|
|
|
|
## Set up git repo script
|
|
|
|
|
2017-11-26 18:14:28 +01:00
|
|
|
In the `tools` directory of [zulip/zulip][github-zulip-zulip] you'll
|
|
|
|
find a bash script `setup-git-repo`. This script installs the Zulip
|
|
|
|
pre-commit hook. This hook will run each time you `git commit` to
|
|
|
|
automatically run Zulip's linters on just the files that the commit
|
|
|
|
modifies. The hook passes no matter the result of the linter, but you
|
|
|
|
should still pay attention to any notices or warnings it displays.
|
2017-11-23 20:21:57 +01:00
|
|
|
|
|
|
|
It's simple to use. Make sure you're in the clone of zulip and run the following:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ ./tools/setup-git-repo
|
|
|
|
```
|
|
|
|
|
|
|
|
The script doesn't produce any output if successful. To check that the hook has
|
|
|
|
been installed, print a directory listing for `.git/hooks` and you should see
|
|
|
|
something similar to:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ ls -l .git/hooks
|
|
|
|
pre-commit -> ../../tools/pre-commit
|
|
|
|
```
|
|
|
|
|
|
|
|
## Set up Travis CI integration
|
|
|
|
|
|
|
|
You might also wish to [configure your fork for use with Travis CI][zulip-git-guide-travisci].
|
|
|
|
|
|
|
|
## Reset to pull request
|
|
|
|
|
|
|
|
`tools/reset-to-pull-request` is a short-cut for [checking out a pull request
|
|
|
|
locally][zulip-git-guide-fetch-pr]. It works slightly differently from the method
|
|
|
|
described above in that it does not create a branch for the pull request
|
|
|
|
checkout.
|
|
|
|
|
|
|
|
**This tool checks for uncommitted changes, but it will move the
|
|
|
|
current branch using `git reset --hard`. Use with caution.**
|
|
|
|
|
|
|
|
First, make sure you are working in a branch you want to move (in this
|
|
|
|
example, we'll use the local `master` branch). Then run the script
|
|
|
|
with the ID number of the pull request as the first argument.
|
|
|
|
|
|
|
|
```
|
|
|
|
$ git checkout master
|
|
|
|
Switched to branch 'master'
|
|
|
|
Your branch is up-to-date with 'origin/master'.
|
|
|
|
|
|
|
|
$ ./tools/reset-to-pull-request 1900
|
|
|
|
+ request_id=1900
|
|
|
|
+ git fetch upstream pull/1900/head
|
|
|
|
remote: Counting objects: 159, done.
|
|
|
|
remote: Compressing objects: 100% (17/17), done.
|
|
|
|
remote: Total 159 (delta 94), reused 91 (delta 91), pack-reused 51
|
|
|
|
Receiving objects: 100% (159/159), 55.57 KiB | 0 bytes/s, done.
|
|
|
|
Resolving deltas: 100% (113/113), completed with 54 local objects.
|
|
|
|
From https://github.com/zulip/zulip
|
|
|
|
* branch refs/pull/1900/head -> FETCH_HEAD
|
|
|
|
+ git reset --hard FETCH_HEAD
|
|
|
|
HEAD is now at 2bcd1d8 troubleshooting tip about provisioning
|
|
|
|
```
|
|
|
|
|
|
|
|
## Fetch a pull request and rebase
|
|
|
|
|
|
|
|
`tools/fetch-rebase-pull-request` is a short-cut for [checking out a pull
|
|
|
|
request locally][zulip-git-guide-fetch-pr] in its own branch and then updating it with any
|
|
|
|
changes from upstream/master with `git rebase`.
|
|
|
|
|
|
|
|
Run the script with the ID number of the pull request as the first argument.
|
|
|
|
|
|
|
|
```
|
|
|
|
$ tools/fetch-rebase-pull-request 1913
|
|
|
|
+ request_id=1913
|
|
|
|
+ git fetch upstream pull/1913/head
|
|
|
|
remote: Counting objects: 4, done.
|
|
|
|
remote: Compressing objects: 100% (4/4), done.
|
|
|
|
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
|
|
|
|
Unpacking objects: 100% (4/4), done.
|
|
|
|
From https://github.com/zulip/zulip
|
|
|
|
* branch refs/pull/1913/head -> FETCH_HEAD
|
|
|
|
+ git checkout upstream/master -b review-1913
|
|
|
|
Branch review-1913 set up to track remote branch master from upstream.
|
|
|
|
Switched to a new branch 'review-1913'
|
|
|
|
+ git reset --hard FETCH_HEAD
|
|
|
|
HEAD is now at 99aa2bf Add provision.py fails issue in common erros
|
|
|
|
+ git pull --rebase
|
|
|
|
Current branch review-1913 is up to date.
|
|
|
|
```
|
|
|
|
|
|
|
|
## Fetch a pull request without rebasing
|
|
|
|
|
|
|
|
`tools/fetch-pull-request` is a similar to `tools/fetch-rebase-pull-request`, but
|
|
|
|
it does not rebase the pull request against upstream/master, thereby getting
|
|
|
|
exactly the same repository state as the commit author had.
|
|
|
|
|
|
|
|
Run the script with the ID number of the pull request as the first argument.
|
|
|
|
|
|
|
|
```
|
|
|
|
$ tools/fetch-pull-request 5156
|
|
|
|
+ git diff-index --quiet HEAD
|
|
|
|
+ request_id=5156
|
|
|
|
+ remote=upstream
|
|
|
|
+ git fetch upstream pull/5156/head
|
|
|
|
From https://github.com/zulip/zulip
|
|
|
|
* branch refs/pull/5156/head -> FETCH_HEAD
|
|
|
|
+ git checkout -B review-original-5156
|
|
|
|
Switched to a new branch 'review-original-5156'
|
|
|
|
+ git reset --hard FETCH_HEAD
|
|
|
|
HEAD is now at 5a1e982 tools: Update clean-branches to clean review branches.
|
|
|
|
```
|
|
|
|
|
|
|
|
## Delete unimportant branches
|
|
|
|
|
|
|
|
`tools/clean-branches` is a shell script that removes branches that are either:
|
|
|
|
|
|
|
|
1. Local branches that are ancestors of origin/master.
|
|
|
|
2. Branches in origin that are ancestors of origin/master and named like `$USER-*`.
|
|
|
|
3. Review branches created by `tools/fetch-rebase-pull-request` and `tools/fetch-pull-request`.
|
|
|
|
|
|
|
|
First, make sure you are working in branch `master`. Then run the script without any
|
|
|
|
arguments for default behavior. Since removing review branches can inadvertently remove any
|
|
|
|
feature branches whose names are like `review-*`, it is not done by default. To
|
|
|
|
use it, run `tools/clean-branches --reviews`.
|
|
|
|
|
|
|
|
```
|
|
|
|
$ tools/clean-branches --reviews
|
|
|
|
Deleting local branch review-original-5156 (was 5a1e982)
|
|
|
|
```
|
|
|
|
|
|
|
|
## Merge conflict on yarn.lock file
|
|
|
|
|
|
|
|
If there is a merge conflict on yarn.lock, yarn should be run to
|
|
|
|
regenerate the file. *Important* don't delete the yarn.lock file. Checkout the
|
|
|
|
latest one from origin/master so that yarn knows the previous asset versions.
|
|
|
|
|
|
|
|
Run the following commands
|
|
|
|
```
|
|
|
|
git checkout origin/master -- yarn.lock
|
|
|
|
yarn install
|
|
|
|
git add yarn.lock
|
|
|
|
git rebase --continue
|
|
|
|
```
|
|
|
|
|
|
|
|
[github-zulip-zulip]: https://github.com/zulip/zulip/
|
|
|
|
[zulip-git-guide-fetch-pr]: ../git/collaborate.html#checkout-a-pull-request-locally
|
|
|
|
[zulip-git-guide-travisci]: ../git/cloning.html#step-3-configure-travis-ci-continuous-integration
|