From cf262c9e9af59b475f08c354843308e358d08533 Mon Sep 17 00:00:00 2001 From: Austin Morgan Date: Fri, 31 May 2024 15:57:17 -0500 Subject: [PATCH 1/7] Update status in the ReadMe Update to state that subrepo is used in production environments. Fixes #621 --- ReadMe.pod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReadMe.pod b/ReadMe.pod index 469d6823..75854efe 100644 --- a/ReadMe.pod +++ b/ReadMe.pod @@ -642,7 +642,7 @@ function is called: =head1 Status -The git-subrepo command has been in use for well over a year and seems to get +The git-subrepo command has been used in production and seems to get the job done. Development is still ongoing but mostly just for fixing bugs. Trying subrepo out is simple and painless (this is not C). From 0daa3a6938c0ef3acfba581c70d041a3bcd92f2d Mon Sep 17 00:00:00 2001 From: Austin Morgan Date: Thu, 21 Dec 2023 00:23:31 -0600 Subject: [PATCH 2/7] Fix quoting A number of places had incorrect quoting. Fixing this found that the paths for some tests were incorrect in the status tests. --- lib/git-subrepo | 6 ++--- share/enable-completion.sh | 2 +- test/push-force.t | 1 + test/status.t | 55 ++++++++++++++++++++------------------ 4 files changed, 34 insertions(+), 30 deletions(-) diff --git a/lib/git-subrepo b/lib/git-subrepo index a6d5d96a..54b9bf18 100755 --- a/lib/git-subrepo +++ b/lib/git-subrepo @@ -166,7 +166,7 @@ main() { # Run the command on all subrepos local args=( "${command_arguments[@]}" ) get-all-subrepos - for subdir in ${subrepos[*]}; do + for subdir in "${subrepos[@]}"; do command-prepare subrepo_remote= subrepo_branch= @@ -1245,11 +1245,11 @@ get-params() { if [[ $i -ge $num ]]; then usage-error "Command '$command' requires arg '${arg#+}'." fi - printf -v ${arg#+} -- "$value" + printf -v "${arg#+}" -- "$value" # Look for function name after ':' to provide a default value else if [[ $i -lt $num ]]; then - printf -v ${arg%:*} -- "$value" + printf -v "${arg%:*}" -- "$value" elif [[ $arg =~ : ]]; then "${arg#*:}" fi diff --git a/share/enable-completion.sh b/share/enable-completion.sh index 6ab3cbfe..4a91f4e1 100644 --- a/share/enable-completion.sh +++ b/share/enable-completion.sh @@ -19,7 +19,7 @@ if [[ -n ${BASH_VERSION-} ]]; then # If a file is found at the location being checked… if [[ -f $f ]]; then # …source it. - source $f + source "$f" [[ $(type -t __gitcomp) != function ]] && echo "WARNING: Git completion script '$f' does not provide a '__gitcomp' function" # Proceed to loading our Bash completion facilities. diff --git a/test/push-force.t b/test/push-force.t index 98c4dc0d..b247bd9e 100644 --- a/test/push-force.t +++ b/test/push-force.t @@ -42,6 +42,7 @@ test-exists \ "$OWNER/bar/Bar2" \ "$OWNER/bar/Foo1" \ + # Test that a fresh repo is not contaminated ( git clone "$UPSTREAM/bar" "$OWNER/newbar" diff --git a/test/status.t b/test/status.t index 2294637a..e4788b9d 100644 --- a/test/status.t +++ b/test/status.t @@ -9,18 +9,18 @@ use Test::More clone-foo-and-bar ( - cd $OWNER/foo - git subrepo clone ../../../$UPSTREAM/bar - git subrepo clone ../../../$UPSTREAM/foo bar/foo + cd "$OWNER"/foo + git subrepo clone "$UPSTREAM"/bar + git subrepo clone "$UPSTREAM"/foo bar/foo mkdir lib - git subrepo clone ../../../$UPSTREAM/bar lib/bar - git subrepo clone ../../../$UPSTREAM/foo lib/bar/foo + git subrepo clone "$UPSTREAM"/bar lib/bar + git subrepo clone "$UPSTREAM"/foo lib/bar/foo ) &> /dev/null || die { output=$( - cd $OWNER/foo - git subrepo status + cd "$OWNER"/foo + git subrepo status --all ) like "$output" "2 subrepos:" \ @@ -41,43 +41,46 @@ clone-foo-and-bar { output=$( - cd $OWNER/foo - git subrepo status --all-recursive + cd "$OWNER"/foo + git subrepo status --ALL ) like "$output" "4 subrepos:" \ "'status --ALL' intro ok" - like "$output" "Git subrepo 'ext/bashplus':" \ - "ext/bashplus is in 'status --ALL'" + like "$output" "Git subrepo 'bar':" \ + "bar is in 'status --ALL'" - like "$output" "Git subrepo 'ext/test-more-bash':" \ - "ext/test-more-bash is in 'status --ALL'" + like "$output" "Git subrepo 'lib/bar':" \ + "lib/bar is in 'status --ALL'" - like "$output" "Git subrepo 'ext/test-more-bash/ext/bashplus':" \ - "ext/test-more-bash/ext/bashplus is in 'status --ALL'" + like "$output" "Git subrepo 'bar/foo':" \ + "bar/foo is in 'status --ALL'" - like "$output" "Git subrepo 'ext/test-more-bash/ext/test-tap-bash':" \ - "ext/test-more-bash/ext/test-tap-bash is in 'status --ALL'" + like "$output" "Git subrepo 'lib/bar/foo':" \ + "lib/bar/foo is in 'status --ALL'" } { - output=$(git subrepo status --all) + output=$( + cd "$OWNER"/foo + git subrepo status --all + ) like "$output" "2 subrepos:" \ "'status --all' intro ok" - like "$output" "Git subrepo 'ext/bashplus':" \ - "ext/bashplus is in 'status --all'" + like "$output" "Git subrepo 'bar':" \ + "bar is in 'status --all'" - like "$output" "Git subrepo 'ext/test-more-bash':" \ - "ext/test-more-bash is in 'status --all'" + like "$output" "Git subrepo 'lib/bar':" \ + "lib/bar is in 'status --all'" - unlike "$output" "Git subrepo 'ext/test-more-bash/ext/bashplus':" \ - "ext/test-more-bash/ext/bashplus is not in 'status --all'" + unlike "$output" "Git subrepo 'bar/foo':" \ + "bar/foo is not in 'status --all'" - unlike "$output" "Git subrepo 'ext/test-more-bash/ext/test-tap-bash':" \ - "ext/test-more-bash/ext/test-tap-bash is not in 'status --all'" + unlike "$output" "Git subrepo 'lib/bar/foo':" \ + "lib/bar/foo is not in 'status --all'" } done_testing 15 From 8d286fb2a0abd9f5852433068c8e7994309b7ef9 Mon Sep 17 00:00:00 2001 From: Austin Morgan Date: Tue, 2 Jul 2024 07:40:27 -0500 Subject: [PATCH 3/7] Fix error tests on git 2.30 and higher git 2.30 added a check to ensure the permissions in the .git folder were "reasonable". When running the test in docker the user is different than the host machine and it was throwing a different error than expected when doing a git subrepo status inside the .git directory. Add a configuration option to ignore the permission mismatch during testing. --- test/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/test/Dockerfile b/test/Dockerfile index 21f57c0f..8f0fd89e 100644 --- a/test/Dockerfile +++ b/test/Dockerfile @@ -108,4 +108,5 @@ RUN cd /root \ RUN git config --global user.email "you@example.com" \ && git config --global user.name "Your Name" \ + && git config --global --add safe.directory /git-subrepo/.git \ && true From af0df06ba27c435c05165b061706d4163770c609 Mon Sep 17 00:00:00 2001 From: Austin Morgan Date: Sat, 6 Jul 2024 22:55:36 -0500 Subject: [PATCH 4/7] Address git 2.33 and later pull strategy Git 2.33 and later ask the user what strategy to use when pulling This broke the pull-force test as git returned an error including how to set the setting. Added the default setting to the command to prevent this issue during tests. --- test/push-force.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/push-force.t b/test/push-force.t index b247bd9e..129102b0 100644 --- a/test/push-force.t +++ b/test/push-force.t @@ -35,7 +35,7 @@ test-exists \ ( set +x cd "$OWNER/bar" - git pull + git pull --rebase=false ) &> /dev/null || die test-exists \ From 2723bf752b79d071da80fb3f826836673c4136f9 Mon Sep 17 00:00:00 2001 From: Austin Morgan Date: Sun, 7 Jul 2024 10:09:42 -0500 Subject: [PATCH 5/7] Update git versions Add newer git versions to the docker file --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index e7643a7d..0c6ae5e9 100644 --- a/Makefile +++ b/Makefile @@ -22,16 +22,16 @@ INSTALL_EXT ?= $(INSTALL_LIB)/$(NAME).d INSTALL_MAN1 ?= $(DESTDIR)$(PREFIX)/share/man/man1 # Docker variables: -DOCKER_TAG ?= 0.0.4 +DOCKER_TAG ?= 0.0.6 DOCKER_IMAGE := ingy/bash-testing:$(DOCKER_TAG) BASH_VERSIONS ?= 5.1 5.0 4.4 4.3 4.2 4.1 4.0 DOCKER_TESTS := $(BASH_VERSIONS:%=docker-test-%) -GIT_VERSIONS := 2.29 2.25 2.17 2.7 +GIT_VERSIONS := 2.45 2.40 2.30 2.29 2.25 2.17 2.7 prove ?= test ?= test/ -bash ?= 5.0 -git ?= 2.29 +bash ?= 5.1 +git ?= 2.45 # Basic targets: default: help From 88b470f42a41eeb537e8431badb12e4e25412b25 Mon Sep 17 00:00:00 2001 From: admorgan Date: Thu, 21 Dec 2023 00:32:56 -0600 Subject: [PATCH 6/7] Use docker tests instead of running on base image Allows for testing a greater set of git and bash configurations --- .github/workflows/test.yml | 8 +++++++- Makefile | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bcfe6276..834766d2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,4 +20,10 @@ jobs: - run: git config --global user.email "you@example.com"; git config --global user.name "Your Name"; - - run: make test + git config --global init.defaultBranch "master"; + git config --global --add safe.directory "$PWD"; + git config --global --add safe.directory "$PWD.git"; + - if: startsWith(matrix.os, 'macos') + run: make test + - if: startsWith(matrix.os, 'ubuntu') + run: make docker-tests diff --git a/Makefile b/Makefile index 0c6ae5e9..fdef6656 100644 --- a/Makefile +++ b/Makefile @@ -106,7 +106,7 @@ clean: rm -fr tmp test/tmp define docker-make-test - docker run -i -t --rm \ + docker run --rm \ -v $(PWD):/git-subrepo \ -w /git-subrepo \ $(DOCKER_IMAGE) \ From 3e623637b91ddf83b0d8f30ee10054c7eaa9469d Mon Sep 17 00:00:00 2001 From: Austin Morgan Date: Sun, 7 Jul 2024 11:22:55 -0500 Subject: [PATCH 7/7] Release 0.4.7 - Convert testing to use docker with updated git versions - Fix numerous places where quoting was incorrect causing path name collisions - Fix pull-force test to deal with git not defaulting to merges on pulls after 2.33 - Fix issue where docker tests didn't work with git 2.30 or higher because of increased permission scrutiny. - Update readme to say this tools is in production environments - Update readme to use internet archive for old articles about subrepo no longer available on their original source --- Changes | 10 ++ Meta | 4 +- ReadMe.pod | 4 +- doc/git-subrepo.swim | 2 +- lib/git-subrepo | 2 +- man/man1/git-subrepo.1 | 200 ++++++++++++++---------------- share/completion.bash | 2 +- share/zsh-completion/_git-subrepo | 4 +- 8 files changed, 111 insertions(+), 117 deletions(-) diff --git a/Changes b/Changes index 61ece692..aed5a787 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,13 @@ +version: 0.4.7 +date: Sun 7 Jul 2024 11:04:00 AM EST +- Convert testing to use docker with updated git versions +- Fix numerous places where quoting was incorrect causing path name collisions +- Fix pull-force test to deal with git not defaulting to merges on pulls after 2.33 +- Fix issue where docker tests didn't work with git 2.30 or higher because of + increased permission scrutiny. +- Update readme to say this tools is in production environments +- Update readme to use internet archive for old articles about subrepo no longer + available on their original source --- version: 0.4.6 date: Fri 21 Apr 2023 10:18:34 AM EST diff --git a/Meta b/Meta index babc4e70..eacc1908 100644 --- a/Meta +++ b/Meta @@ -1,11 +1,11 @@ =meta: 0.0.2 name: git-subrepo -version: 0.4.6 +version: 0.4.7 abstract: Git Submodule Alternative homepage: https://github.com/ingydotnet/git-subrepo#readme license: MIT -copyright: 2013-2023 +copyright: 2013-2024 author: name: Ingy döt Net diff --git a/ReadMe.pod b/ReadMe.pod index 75854efe..faca2c72 100644 --- a/ReadMe.pod +++ b/ReadMe.pod @@ -642,8 +642,8 @@ function is called: =head1 Status -The git-subrepo command has been used in production and seems to get -the job done. Development is still ongoing but mostly just for fixing bugs. +The git-subrepo command has been used in production and seems to get the job +done. Development is still ongoing but mostly just for fixing bugs. Trying subrepo out is simple and painless (this is not C). Nothing is permanent (if you do not push to shared remotes). ie You can always diff --git a/doc/git-subrepo.swim b/doc/git-subrepo.swim index eefb1bf2..3560df88 100644 --- a/doc/git-subrepo.swim +++ b/doc/git-subrepo.swim @@ -577,7 +577,7 @@ is called: = Status -The git-subrepo command has been in use for well over a year and seems to get +The git-subrepo command has been used in production and seems to get the job done. Development is still ongoing but mostly just for fixing bugs. Trying subrepo out is simple and painless (this is not `git submodule`). diff --git a/lib/git-subrepo b/lib/git-subrepo index 54b9bf18..eabf9b19 100755 --- a/lib/git-subrepo +++ b/lib/git-subrepo @@ -30,7 +30,7 @@ fi bash+:import :std can version-check -VERSION=0.4.6 +VERSION=0.4.7 REQUIRED_BASH_VERSION=4.0 REQUIRED_GIT_VERSION=2.7.0 GIT_TMP=$(git rev-parse --git-common-dir 2> /dev/null || echo .git)/tmp diff --git a/man/man1/git-subrepo.1 b/man/man1/git-subrepo.1 index b67899af..47888c57 100644 --- a/man/man1/git-subrepo.1 +++ b/man/man1/git-subrepo.1 @@ -1,4 +1,5 @@ -.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35) +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== @@ -15,29 +16,12 @@ .ft R .fi .. -.\" Set up some character translations and predefined strings. \*(-- will -.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left -.\" double quote, and \*(R" will give a right double quote. \*(C+ will -.\" give a nicer C++. Capital omega is used to do unbreakable dashes and -.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, -.\" nothing in troff, for use with C<>. -.tr \(*W- -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ -. ds -- \(*W- -. ds PI pi -. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -. ds L" "" -. ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ -. ds -- \|\(em\| -. ds PI \(*p -. ds L" `` -. ds R" '' . ds C` . ds C' 'br\} @@ -71,15 +55,15 @@ .\" ======================================================================== .\" .IX Title "STDIN 1" -.TH STDIN 1 "August 2022" "Generated by Swim v0.1.48" "Git Submodule Alternative" +.TH STDIN 1 2024-07-07 "Generated by Swim v0.1.48" "Git Submodule Alternative" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh -.SH "Name" +.SH Name .IX Header "Name" git-subrepo \- Git Submodule Alternative -.SH "Synopsis" +.SH Synopsis .IX Header "Synopsis" .Vb 1 \& git subrepo \-h # Help Overview @@ -101,71 +85,71 @@ git-subrepo \- Git Submodule Alternative \& git subrepo version \& git subrepo upgrade .Ve -.SH "Description" +.SH Description .IX Header "Description" -This git command \*(L"clones\*(R" an external git repo into a subdirectory of your +This git command "clones" an external git repo into a subdirectory of your repo. Later on, upstream changes can be pulled in, and local changes can be pushed back. Simple. -.SH "Benefits" +.SH Benefits .IX Header "Benefits" This command is an improvement from \f(CW\*(C`git\-submodule\*(C'\fR and \f(CW\*(C`git\-subtree\*(C'\fR; two other git commands with similar goals, but various problems. .PP It assumes there are 3 main roles of people interacting with a repo, and attempts to serve them all well: -.IP "\(bu" 4 +.IP \(bu 4 \&\fBowner\fR \- The person who authors/owns/maintains a repo. -.IP "\(bu" 4 +.IP \(bu 4 \&\fBusers\fR \- People who are just using/installing the repo. -.IP "\(bu" 4 +.IP \(bu 4 \&\fBcollaborators\fR \- People who commit code to the repo and subrepos. .PP The \f(CW\*(C`git\-subrepo\*(C'\fR command benefits these roles in the following ways: -.IP "\(bu" 4 +.IP \(bu 4 Simple and intuitive commandline usage (with tab completion). -.IP "\(bu" 4 +.IP \(bu 4 Users get your repo and all your subrepos just by cloning your repo. -.IP "\(bu" 4 +.IP \(bu 4 Users do not need to install \f(CW\*(C`git\-subrepo\*(C'\fR, ever. -.IP "\(bu" 4 +.IP \(bu 4 Collaborators do not need to install unless they want to push/pull. -.IP "\(bu" 4 +.IP \(bu 4 Collaborators know when a subdir is a subrepo (it has a \f(CW\*(C`.gitrepo\*(C'\fR file). -.IP "\(bu" 4 +.IP \(bu 4 The \f(CW\*(C`.gitrepo\*(C'\fR file never gets pushed back to the subrepo upstream. -.IP "\(bu" 4 +.IP \(bu 4 Well named branches and remotes are generated for manual operations. -.IP "\(bu" 4 +.IP \(bu 4 Owners do not deal with the complications of keeping submodules in sync. -.IP "\(bu" 4 +.IP \(bu 4 Subrepo repositories can contain subrepos themselves. -.IP "\(bu" 4 +.IP \(bu 4 Branching with subrepos JustWorks™. -.IP "\(bu" 4 +.IP \(bu 4 Different branches can have different subrepos in different states, etc. -.IP "\(bu" 4 +.IP \(bu 4 Moving/renaming/deleting a subrepo subdir JustWorks™. -.IP "\(bu" 4 +.IP \(bu 4 You can \f(CW\*(C`init\*(C'\fR an existing subdirectory into a subrepo. -.IP "\(bu" 4 +.IP \(bu 4 Your git history is kept squeaky clean. -.IP "\(bu" 4 +.IP \(bu 4 Upstream history (clone/pull) is condensed into a single commit. -.IP "\(bu" 4 +.IP \(bu 4 Pulls can use a \f(CW\*(C`merge\*(C'\fR, \f(CW\*(C`rebase\*(C'\fR or \f(CW\*(C`force\*(C'\fR strategies. -.IP "\(bu" 4 +.IP \(bu 4 You can see the subrepo history with \f(CW\*(C`git log subrepo//fetch\*(C'\fR. -.IP "\(bu" 4 +.IP \(bu 4 Commits pushed back upstream are \fBnot\fR condensed (by default). -.IP "\(bu" 4 +.IP \(bu 4 Trivial to try any subrepo operations and then reset back. -.IP "\(bu" 4 +.IP \(bu 4 No configuration required. -.IP "\(bu" 4 +.IP \(bu 4 Does not introduce history that messes up other git commands. -.IP "\(bu" 4 +.IP \(bu 4 Fixes known rebase failures with \f(CW\*(C`git\-subtree\*(C'\fR. -.SH "Installation" +.SH Installation .IX Header "Installation" The best short answer is: .PP @@ -174,10 +158,10 @@ The best short answer is: \& echo \*(Aqsource /path/to/git\-subrepo/.rc\*(Aq >> ~/.bashrc .Ve .PP -The complete \*(L"Installation Instructions\*(R" can be found below. +The complete "Installation Instructions" can be found below. .PP Note: git-subrepo needs a git version (> 2.7) that supports worktree:s. -.SH "Commands" +.SH Commands .IX Header "Commands" All the \fBsubrepo\fR commands use names of actual Git commands and try to do operations that are similar to their Git counterparts. They also attempt to @@ -204,7 +188,7 @@ All subsequent commands refer to the subrepo by the name of the \&\fIsubdir\fR. From the subdir, all the current information about the subrepo can be obtained. .Sp -The \f(CW\*(C`\-\-force\*(C'\fR option will \*(L"reclone\*(R" (completely replace) an existing subdir. +The \f(CW\*(C`\-\-force\*(C'\fR option will "reclone" (completely replace) an existing subdir. .Sp The \f(CW\*(C`\-\-method\*(C'\fR option will decide how the join process between branches are performed. The default option is merge. @@ -223,7 +207,7 @@ original repo will look exactly the same except that there will be a \f(CW\*(C`< .Sp If you specify the \f(CW\*(C`\-\-remote\*(C'\fR (and optionally the \f(CW\*(C`\-\-branch\*(C'\fR) option, the values will be added to the \f(CW\*(C`/.gitrepo\*(C'\fR file. The \f(CW\*(C`\-\-remote\*(C'\fR -option is the upstream \s-1URL,\s0 and the \f(CW\*(C`\-\-branch\*(C'\fR option is the upstream branch +option is the upstream URL, and the \f(CW\*(C`\-\-branch\*(C'\fR option is the upstream branch to push to. These values will be needed to do a \f(CW\*(C`git subrepo push\*(C'\fR command, but they can be provided later on the \f(CW\*(C`push\*(C'\fR command (and saved to \f(CW\*(C`<> if you also specify the \f(CW\*(C`\-\-update\*(C'\fR option). .Sp @@ -297,19 +281,19 @@ the \f(CW\*(C`branch\*(C'\fR command and merge things yourself before pushing if (although that is probably a rare use case). .Sp The \f(CW\*(C`push\*(C'\fR command requires a branch that has been properly merged/rebased -with the upstream \s-1HEAD\s0 (unless the upstream \s-1HEAD\s0 is empty, which is common -when doing a first \f(CW\*(C`push\*(C'\fR after an \f(CW\*(C`init\*(C'\fR). That means the upstream \s-1HEAD\s0 is +with the upstream HEAD (unless the upstream HEAD is empty, which is common +when doing a first \f(CW\*(C`push\*(C'\fR after an \f(CW\*(C`init\*(C'\fR). That means the upstream HEAD is one of the commits in the branch. .Sp By default the branch ref \f(CW\*(C`refs/subrepo//pull\*(C'\fR will be pushed, but you can specify a (properly merged) branch to push. .Sp After that, the \f(CW\*(C`push\*(C'\fR command just checks that the branch contains the -upstream \s-1HEAD\s0 and then pushes it upstream. +upstream HEAD and then pushes it upstream. .Sp The \f(CW\*(C`\-\-force\*(C'\fR option will do a force push. Force pushes are typically discouraged. Only use this option if you fully understand it. (The \f(CW\*(C`\-\-force\*(C'\fR -option will \s-1NOT\s0 check for a proper merge. \s-1ANY\s0 branch will be force pushed!) +option will NOT check for a proper merge. ANY branch will be force pushed!) .Sp The \f(CW\*(C`push\*(C'\fR command accepts the \f(CW\*(C`\-\-all\*(C'\fR, \f(CW\*(C`\-\-branch=\*(C'\fR, \f(CW\*(C`\-\-dry\-run\*(C'\fR, \f(CW\*(C`\-\-file\*(C'\fR, \f(CW\*(C`\-\-force\*(C'\fR, \f(CW\*(C`\-\-merge\*(C'\fR, \f(CW\*(C`\-\-message\*(C'\fR, \f(CW\*(C`\-\-rebase\*(C'\fR, \f(CW\*(C`\-\-remote=\*(C'\fR, \f(CW\*(C`\-\-squash\*(C'\fR and \f(CW\*(C`\-\-update\*(C'\fR options. .ie n .IP """git subrepo fetch |\-\-all [\-r ] [\-b ]""" 4 @@ -341,11 +325,11 @@ The \f(CW\*(C`branch\*(C'\fR command accepts the \f(CW\*(C`\-\-all\*(C'\fR, \f(C .IX Item "git subrepo commit [] [-m ] [--file=] [-e] [-f] [-F]" Add subrepo branch to current history as a single commit. .Sp -This command is generally used after a hand-merge. You have done a \f(CW\*(C`subrepobranch\*(C'\fR and merged (rebased) it with the upstream. This command takes the \s-1HEAD\s0 +This command is generally used after a hand-merge. You have done a \f(CW\*(C`subrepobranch\*(C'\fR and merged (rebased) it with the upstream. This command takes the HEAD of that branch, puts its content into the subrepo subdir and adds a new commit for it to the top of your mainline history. .Sp -This command requires that the upstream \s-1HEAD\s0 be in the \f(CW\*(C`subrepo/\*(C'\fR +This command requires that the upstream HEAD be in the \f(CW\*(C`subrepo/\*(C'\fR branch history. That way the same branch can push upstream. Use the \f(CW\*(C`\-\-force\*(C'\fR option to commit anyway. .Sp @@ -359,7 +343,7 @@ Get the status of a subrepo. Uses the \f(CW\*(C`\-\-all\*(C'\fR option by defaul The \f(CW\*(C`\-\-verbose\*(C'\fR option will show all the recent local and upstream commits. .Sp Use \f(CW\*(C`\-\-ALL\*(C'\fR to show the subrepos of the subrepos (ie the -\&\*(L"subsubrepos\*(R"), if any. +"subsubrepos"), if any. .Sp The \f(CW\*(C`status\*(C'\fR command accepts the \f(CW\*(C`\-\-all\*(C'\fR, \f(CW\*(C`\-\-ALL\*(C'\fR, \f(CW\*(C`\-\-fetch\*(C'\fR, \f(CW\*(C`\-\-quiet\*(C'\fR and \f(CW\*(C`\-\-verbose\*(C'\fR options. @@ -379,7 +363,7 @@ Use \f(CW\*(C`\-\-all\*(C'\fR to clean up after all the current subrepos. Someti change to a branch where a subrepo doesn't exist, and then \f(CW\*(C`\-\-all\*(C'\fR won't find it. Use \f(CW\*(C`\-\-ALL\*(C'\fR to remove any artifacts that were ever created by subrepo. .Sp -To remove \s-1ALL\s0 subrepo artifacts: +To remove ALL subrepo artifacts: .Sp .Vb 1 \& git subrepo clean \-\-ALL \-\-force @@ -429,15 +413,15 @@ latest code. .SH "Command Options" .IX Header "Command Options" .ie n .IP """\-h""" 4 -.el .IP "\f(CW\-h\fR" 4 +.el .IP \f(CW\-h\fR 4 .IX Item "-h" Show a brief view of the commands and options. .ie n .IP """\-\-help""" 4 -.el .IP "\f(CW\-\-help\fR" 4 +.el .IP \f(CW\-\-help\fR 4 .IX Item "--help" Gives an overview of the help options available for the subrepo command. .ie n .IP """\-\-version""" 4 -.el .IP "\f(CW\-\-version\fR" 4 +.el .IP \f(CW\-\-version\fR 4 .IX Item "--version" Print the git-subrepo version. Just the version number. Try the \f(CW\*(C`version\*(C'\fR command for more version info. @@ -450,12 +434,12 @@ applicable). .el .IP "\f(CW\-\-ALL\fR (\f(CW\-A\fR)" 4 .IX Item "--ALL (-A)" If you have subrepos that also have subrepos themselves, issue the command to -\&\s-1ALL\s0 of them. Note that the \f(CW\*(C`\-\-ALL\*(C'\fR option only works for a subset of the +ALL of them. Note that the \f(CW\*(C`\-\-ALL\*(C'\fR option only works for a subset of the commands that \f(CW\*(C`\-\-all\*(C'\fR works for. .ie n .IP """\-\-branch="" (""\-b "")" 4 .el .IP "\f(CW\-\-branch=\fR (\f(CW\-b \fR)" 4 .IX Item "--branch= (-b )" -Use a different upstream branch-name than the remote \s-1HEAD\s0 or the one saved in +Use a different upstream branch-name than the remote HEAD or the one saved in \&\f(CW\*(C`.gitrepo\*(C'\fR locally. .ie n .IP """\-\-dry\-run"" (""\-N"")" 4 .el .IP "\f(CW\-\-dry\-run\fR (\f(CW\-N\fR)" 4 @@ -479,7 +463,7 @@ Supply your own commit message from a file .IX Item "--force (-f)" Use this option to force certain commands that fail in the general case. .Sp -\&\s-1NOTE:\s0 The \f(CW\*(C`\-\-force\*(C'\fR option means different things for different commands. +NOTE: The \f(CW\*(C`\-\-force\*(C'\fR option means different things for different commands. Read the command specific doc for the exact meaning. .ie n .IP """\-\-merge"" (""\-M"")" 4 .el .IP "\f(CW\-\-merge\fR (\f(CW\-M\fR)" 4 @@ -528,41 +512,41 @@ Applicable to most commands. .el .IP "\f(CW\-\-DEBUG\fR (\f(CW\-x\fR)" 4 .IX Item "--DEBUG (-x)" Use the Bash \f(CW\*(C`set \-x\*(C'\fR option which prints every command before it is -run. \s-1VERY\s0 noisy, but extremely useful in deep debugging. Applicable to +run. VERY noisy, but extremely useful in deep debugging. Applicable to all commands. .SH "Environment Variables" .IX Header "Environment Variables" The \f(CW\*(C`git\-subrepo\*(C'\fR command exports and honors some environment variables: .ie n .IP """GIT_SUBREPO_ROOT""" 4 -.el .IP "\f(CWGIT_SUBREPO_ROOT\fR" 4 +.el .IP \f(CWGIT_SUBREPO_ROOT\fR 4 .IX Item "GIT_SUBREPO_ROOT" This is set by the \f(CW\*(C`.rc\*(C'\fR file, if you use that method to install / enable \f(CW\*(C`git\-subrepo\*(C'\fR. It contains the path of the \f(CW\*(C`git\-subrepo\*(C'\fR repository. .ie n .IP """GIT_SUBREPO_RUNNING""" 4 -.el .IP "\f(CWGIT_SUBREPO_RUNNING\fR" 4 +.el .IP \f(CWGIT_SUBREPO_RUNNING\fR 4 .IX Item "GIT_SUBREPO_RUNNING" This variable is exported when \f(CW\*(C`git\-subrepo\*(C'\fR is running. It is set to the pid of the \f(CW\*(C`git\-subrepo\*(C'\fR process that is running. Other processes, like git hooks for instance, can use this information to adjust accordingly. .ie n .IP """GIT_SUBREPO_COMMAND""" 4 -.el .IP "\f(CWGIT_SUBREPO_COMMAND\fR" 4 +.el .IP \f(CWGIT_SUBREPO_COMMAND\fR 4 .IX Item "GIT_SUBREPO_COMMAND" This variable is exported when \f(CW\*(C`git\-subrepo\*(C'\fR is running. It is set to the name of the \f(CW\*(C`git\-subrepo\*(C'\fR subcommand that is running. .ie n .IP """GIT_SUBREPO_PAGER""" 4 -.el .IP "\f(CWGIT_SUBREPO_PAGER\fR" 4 +.el .IP \f(CWGIT_SUBREPO_PAGER\fR 4 .IX Item "GIT_SUBREPO_PAGER" Use this to specify the pager to use for long output commands. Defaults to \&\f(CW$PAGER\fR or \f(CW\*(C`less\*(C'\fR. .ie n .IP """GIT_SUBREPO_QUIET""" 4 -.el .IP "\f(CWGIT_SUBREPO_QUIET\fR" 4 +.el .IP \f(CWGIT_SUBREPO_QUIET\fR 4 .IX Item "GIT_SUBREPO_QUIET" Set this for quiet (\f(CW\*(C`\-q\*(C'\fR) output. .ie n .IP """GIT_SUBREPO_VERBOSE""" 4 -.el .IP "\f(CWGIT_SUBREPO_VERBOSE\fR" 4 +.el .IP \f(CWGIT_SUBREPO_VERBOSE\fR 4 .IX Item "GIT_SUBREPO_VERBOSE" Set this for verbose (\f(CW\*(C`\-v\*(C'\fR) output. .ie n .IP """GIT_SUBREPO_DEBUG""" 4 -.el .IP "\f(CWGIT_SUBREPO_DEBUG\fR" 4 +.el .IP \f(CWGIT_SUBREPO_DEBUG\fR 4 .IX Item "GIT_SUBREPO_DEBUG" Set this for debugging (\f(CW\*(C`\-d\*(C'\fR) output. .SH "Installation Instructions" @@ -604,18 +588,18 @@ to your other git commands: .Ve .PP This method does not account for upgrading and command completion yet. -.SS "Windows" +.SS Windows .IX Subsection "Windows" This command is known to work in these Windows environments: -.IP "\(bu" 4 -Git for Windows \*(-- -.IP "\(bu" 4 -Babun \*(-- -.IP "\(bu" 4 -Cygwin \*(-- +.IP \(bu 4 +Git for Windows \-\- +.IP \(bu 4 +Babun \-\- +.IP \(bu 4 +Cygwin \-\- .PP Let us know if there are others that it works (or doesn't work) in. -.SH "Testing" +.SH Testing .IX Header "Testing" The \f(CW\*(C`git\-subrepo\*(C'\fR repository comes with a extensive test suite. You can run it with: @@ -629,7 +613,7 @@ or if you don't have \f(CW\*(C`make\*(C'\fR on your system: .Vb 1 \& prove \-v test .Ve -.SH "Upgrading" +.SH Upgrading .IX Header "Upgrading" If you used the \f(CW\*(C`.rc\*(C'\fR or \f(CW\*(C`PATH\*(C'\fR method of installation, just run this to upgrade \f(CW\*(C`git\-subrepo\*(C'\fR: @@ -666,17 +650,17 @@ need to enable that first: .PP On your system, the Git completion script might be found at any of the following locations (or somewhere else that we don't know about): -.IP "\(bu" 4 +.IP \(bu 4 \&\f(CW\*(C`/etc/bash_completion.d/git\*(C'\fR -.IP "\(bu" 4 +.IP \(bu 4 \&\f(CW\*(C`/usr/share/bash\-completion/git\*(C'\fR -.IP "\(bu" 4 +.IP \(bu 4 \&\f(CW\*(C`/usr/share/bash\-completion/completions/git\*(C'\fR -.IP "\(bu" 4 +.IP \(bu 4 \&\f(CW\*(C`/opt/local/share/bash\-completion/completions/git\*(C'\fR -.IP "\(bu" 4 +.IP \(bu 4 \&\f(CW\*(C`/usr/local/etc/bash_completion.d/git\*(C'\fR -.IP "\(bu" 4 +.IP \(bu 4 \&\f(CW\*(C`~/.homebrew/etc/bash_completion.d/git\*(C'\fR .PP In case you can't find any of these, this repository contains a copy of the @@ -701,10 +685,10 @@ function is called: .Vb 1 \& fpath=(\*(Aq/path/to/git\-subrepo/share/zsh\-completion\*(Aq $fpath) .Ve -.SH "Status" +.SH Status .IX Header "Status" -The git-subrepo command has been in use for well over a year and seems to get -the job done. Development is still ongoing but mostly just for fixing bugs. +The git-subrepo command has been used in production and seems to get the job +done. Development is still ongoing but mostly just for fixing bugs. .PP Trying subrepo out is simple and painless (this is not \f(CW\*(C`git submodule\*(C'\fR). Nothing is permanent (if you do not push to shared remotes). ie You can always @@ -716,28 +700,28 @@ issues on anything that seems wrong. .PP If you want to chat about the \f(CW\*(C`git\-subrepo\*(C'\fR command, join \f(CW\*(C`#gitcommands\*(C'\fR on \&\f(CW\*(C`irc.freenode.net\*(C'\fR. -.SH "Notes" +.SH Notes .IX Header "Notes" -.IP "\(bu" 4 -Works on \s-1POSIX\s0 systems: Linux, \s-1BSD, OSX,\s0 etc. -.IP "\(bu" 4 -Works on various Windows environments. See \*(L"Windows\*(R" section above. -.IP "\(bu" 4 +.IP \(bu 4 +Works on POSIX systems: Linux, BSD, OSX, etc. +.IP \(bu 4 +Works on various Windows environments. See "Windows" section above. +.IP \(bu 4 The \f(CW\*(C`git\-subrepo\*(C'\fR repo itself has 2 subrepos under the \f(CW\*(C`ext/\*(C'\fR subdirectory. -.IP "\(bu" 4 +.IP \(bu 4 Written in (very modern) Bash, with full test suite. Take a look. -.IP "\(bu" 4 +.IP \(bu 4 A \f(CW\*(C`.gitrepo\*(C'\fR file never is in the top level dir (next to a \f(CW\*(C`.git/\*(C'\fR dir). -.SH "Authors" +.SH Authors .IX Header "Authors" -.IP "\(bu" 4 +.IP \(bu 4 Ingy döt Net -.IP "\(bu" 4 +.IP \(bu 4 Magnus Carlsson -.IP "\(bu" 4 +.IP \(bu 4 Austin Morgan .SH "License and Copyright" .IX Header "License and Copyright" -The \s-1MIT\s0 License (\s-1MIT\s0) +The MIT License (MIT) .PP Copyright (c) 2013\-2020 Ingy döt Net diff --git a/share/completion.bash b/share/completion.bash index adaa9c6d..89f30a46 100644 --- a/share/completion.bash +++ b/share/completion.bash @@ -3,7 +3,7 @@ # DO NOT EDIT. This file generated by pkg/bin/generate-completion.pl. _git_subrepo() { - local _opts=" -h --help --version -a --all -A --ALL -b= --branch= -e --edit -f --force -F --fetch -M= --method= --Default -m= --message= -r= --remote= -s --squash -u --update -q --quiet -v --verbose -d --debug -x --DEBUG" + local _opts=" -h --help --version -a --all -A --ALL -b= --branch= -e --edit -f --force -F --fetch -M= --method= -m= --message= --file= -r= --remote= -s --squash -u --update -q --quiet -v --verbose -d --debug -x --DEBUG" local subcommands="branch clean clone commit config fetch help init pull push status upgrade version" local subdircommands="branch clean commit config fetch pull push status" local subcommand="$(__git_find_on_cmdline "$subcommands")" diff --git a/share/zsh-completion/_git-subrepo b/share/zsh-completion/_git-subrepo index a8069d9f..7f913d69 100644 --- a/share/zsh-completion/_git-subrepo +++ b/share/zsh-completion/_git-subrepo @@ -19,9 +19,9 @@ _git-subrepo() { '(-e --edit)'{-e,--edit}'[Edit commit message]' \ '(-f --force)'{-f,--force}'[Force certain operations]' \ '(-F --fetch)'{-F,--fetch}'[Fetch the upstream content first]' \ - '(-M --method)'{-M,--method}'[Method when you join, valid options are '"'"'merge'"'"' or '"'"'rebase'"'"']:M' \ - '--Default[is '"'"'merge'"'"']' \ + '(-M --method)'{-M,--method}'[Join method: '"'"'merge'"'"' (default) or '"'"'rebase'"'"']:M' \ '(-m --message)'{-m,--message}'[Specify a commit message]:m' \ + '--file[Specify a commit message file]:file' \ '(-r --remote)'{-r,--remote}'[Specify the upstream remote to push/pull/fetch]:r' \ '(-s --squash)'{-s,--squash}'[Squash commits on push]' \ '(-u --update)'{-u,--update}'[Add the --branch and/or --remote overrides to .gitrepo]' \