[tor-bugs] #32121 [Core Tor/Tor]: Refactor some common configs and functions out of the git scripts.

Tor Bug Tracker & Wiki blackhole at torproject.org
Wed Feb 12 01:37:25 UTC 2020


#32121: Refactor some common configs and functions out of the git scripts.
-------------------------------------+------------------------------------
 Reporter:  teor                     |          Owner:  nickm
     Type:  enhancement              |         Status:  needs_review
 Priority:  Medium                   |      Milestone:  Tor: 0.4.4.x-final
Component:  Core Tor/Tor             |        Version:
 Severity:  Normal                   |     Resolution:
 Keywords:  git-scripts, 044-should  |  Actual Points:  .5
Parent ID:                           |         Points:
 Reviewer:                           |        Sponsor:
-------------------------------------+------------------------------------
Changes (by teor):

 * actualpoints:  .3 => .5


Comment:

 Replying to [comment:6 nickm]:
 > Branch `ticket32121` with PR at
 https://github.com/torproject/tor/pull/1720 .
 >
 > I have tested this a little, but not extensively. I've done my best to
 write this in a way so that the individual scripts don't need to change
 how they use anything.  This branch actually removes code from the scripts
 overall.

 I really like this change, and I'm glad we've finally made it happen. The
 design is much better than what I had in mind.

 > I'm afraid I have no idea how to write tests for this (#32122).

 Let's use the typical merge and test workflows, but without actually
 making any commits?

 Here's a detailed design for some tests:

 (We should probably make this test script into its own script, so we can
 run it in CI, and from the git hooks.)

 Script arguments:
 * temporary TOR_FULL_GIT_PATH: `mktemp -d` by default, ${TRAVIS_BUILD_DIR
 }/git-scripts-test` in Travis

 Useful TOR_EXTRA_CLONE_ARGS:
 * only clone recent commits: --depth ???
 * re-use existing git packs: --reference-if-able "$TOR_FULL_GIT_PATH/tor"

 Setup:
 {{{
 # list the active tor branches, for testing and diagnostics
 git-list-tor-branches.sh
 }}}

 Help:
 {{{
 git-list-tor-branches.sh -h
 git-setup-dirs.sh -h
 git-pull-all.sh -h
 git-merge-forward.sh -h
 git-push-all.sh -h
 }}}

 Dry Run:
 {{{
 # now dry run all the scripts
 git-setup-dirs.sh -n
 git-pull-all.sh -n
 git-merge-forward.sh -n
 git-push-all.sh -n
 }}}

 List Branches:
 {{{
 git-list-tor-branches.sh
 git-list-tor-branches.sh -s
 # Print and eval the bash code, but don't change the current shell's env
 # branch_path
 git-list-tor-branches.sh -b
 echo $(eval "$(git-list-tor-branches.sh -b)"; echo "$WORKTREE")
 # merge
 git-list-tor-branches.sh -m
 echo $(eval "$(git-list-tor-branches.sh -m)"; echo "$WORKTREE")
 }}}

 List maint-* and master branches:
 {{{
 git-list-tor-branches.sh -R
 git-list-tor-branches.sh -s -R
 # Print and eval the bash code, but don't change the current shell's env
 # branch_path
 git-list-tor-branches.sh -b -R
 echo $(eval "$(git-list-tor-branches.sh -b -R)"; echo "$WORKTREE")
 # merge
 git-list-tor-branches.sh -m -R
 echo $(eval "$(git-list-tor-branches.sh -m -R)"; echo "$WORKTREE")
 }}}

 Let's have a test script option that stops here: we can test some things
 in pre-commit and pre-push hooks (as long as we log output to a file), but
 cloning tor is too slow.

 Merge:
 {{{
 # setup directories
 git-setup-dirs.sh
 # redundant pull, for testing, the merge script also does a pull before
 merging
 git-pull-all.sh
 # redundant merge forward, no changes, so git won't make merge commits
 git-merge-forward.sh
 # redundant push, no changes, so the script won't actually push anything
 git-push-all.sh
 }}}

 Test Branch:
 {{{
 # add a fake remote
 git remote add fake_ci_remote fake_ci_remote_url
 # list the suffixes for the active tor branches, for testing and
 diagnostics
 git-list-tor-branches.sh -s
 # setup directories, use existing mode
 git-setup-dirs.sh -u
 # merge forward, test branch mode
 git-merge-forward.sh -t fake_ci_test
 # merge forward, use existing test branch mode
 git-merge-forward.sh -t fake_ci_test -u
 # redundant push, no changes, so the script won't actually push anything
 git-push-all.sh -t fake_ci_test -r fake_ci_remote
 }}}

 Things we don't test:
 {{{
 # we can't test `git-push-all.sh -s`, because it actually pushes branches
 }}}

 I'll try to turn these notes into a script later today, after I've fixed
 some sponsor 55 bugs.

 > I'm not a very good bash programmer, so I might need your help in fixing
 up whatever issues you find.

 shellcheck has made all of us better bash programmers :-)

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/32121#comment:7>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list