Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

submodule: absorb git dir instead of dying on deinit #1078

Conversation

mugdhapattnaik
Copy link
Contributor

@mugdhapattnaik mugdhapattnaik commented Aug 26, 2021

Changes since v6:

  • Edited commit message based on suggestions given.
  • Passed correct arguments to absorb gitdir function; path and recurse flag
  • Modified behaviour of deinit such that it absorbs the gitdir even when not
    forced.

Changes since v5:

  • Fixed accidental submission of old version

Changes since v4:

  • Changed test case from "! test -d" to "test_path_is_missing"

Changes since v3:

  • Replaced 1 instance of the word "folder" with "directory"
  • Fixed tab spacing

Changes since v2:

  • Replaced all instances of the word "folder" with either
    "directory" or "git dir"

Changes since v1:

  • Removed extra indent within the if statements
  • Moved absorb_git_dir_into_superproject() call outside the if
    condition checking for --quiet flag

Currently, running 'git submodule deinit' on repos where the
submodule's '.git' is a directory, aborts with a message that is not
exactly user friendly.

Let's change this to instead warn the user that the .git/ directory
has been absorbed into the superproject.
The rest of the deinit function can operate as it already does with
new-style submodules.

In one test, we used to require "git submodule deinit" to fail even
with the "--force" option when the submodule's .git/ directory is not
absorbed. Adjust it to expect the operation to pass.

I have changed the 'cp -R ../.git/modules/example .git' to
'mv ../.git/modules/example .git' since, at the time of testing, the test
would fail - deinit now would be moving the '.git' directory into the
superproject's '.git/modules/' directory, and since this same directory
already existed before, it was causing errors. So, before running deinit,
instead of copying the '.git' directory into the submodule, if we
move it there instead, this functionality can be appropriately tested.

Thank you,
Mugdha

cc: Bagas Sanjaya bagasdotme@gmail.com
cc: Atharva Raykar raykar.ath@gmail.com
cc: Junio C Hamano gitster@pobox.com
cc: Christian Couder christian.couder@gmail.com
cc: Ævar Arnfjörð Bjarmason avarab@gmail.com

@gitgitgadget-git
Copy link

Welcome to GitGitGadget

Hi @mugdhapattnaik, and welcome to GitGitGadget, the GitHub App to send patch series to the Git mailing list from GitHub Pull Requests.

Please make sure that your Pull Request has a good description, as it will be used as cover letter.

Also, it is a good idea to review the commit messages one last time, as the Git project expects them in a quite specific form:

  • the lines should not exceed 76 columns,
  • the first line should be like a header and typically start with a prefix like "tests:" or "revisions:" to state which subsystem the change is about, and
  • the commit messages' body should be describing the "why?" of the change.
  • Finally, the commit messages should end in a Signed-off-by: line matching the commits' author.

It is in general a good idea to await the automated test ("Checks") in this Pull Request before contributing the patches, e.g. to avoid trivial issues such as unportable code.

Contributing the patches

Before you can contribute the patches, your GitHub username needs to be added to the list of permitted users. Any already-permitted user can do that, by adding a comment to your PR of the form /allow. A good way to find other contributors is to locate recent pull requests where someone has been /allowed:

Both the person who commented /allow and the PR author are able to /allow you.

An alternative is the channel #git-devel on the Libera Chat IRC network:

<newcontributor> I've just created my first PR, could someone please /allow me? https://github.com/gitgitgadget/git/pull/12345
<veteran> newcontributor: it is done
<newcontributor> thanks!

Once on the list of permitted usernames, you can contribute the patches to the Git mailing list by adding a PR comment /submit.

If you want to see what email(s) would be sent for a /submit request, add a PR comment /preview to have the email(s) sent to you. You must have a public GitHub email address for this.

After you submit, GitGitGadget will respond with another comment that contains the link to the cover letter mail in the Git mailing list archive. Please make sure to monitor the discussion in that thread and to address comments and suggestions (while the comments and suggestions will be mirrored into the PR by GitGitGadget, you will still want to reply via mail).

If you do not want to subscribe to the Git mailing list just to be able to respond to a mail, you can download the mbox from the Git mailing list archive (click the (raw) link), then import it into your mail program. If you use GMail, you can do this via:

curl -g --user "<EMailAddress>:<Password>" \
    --url "imaps://imap.gmail.com/INBOX" -T /path/to/raw.txt

To iterate on your change, i.e. send a revised patch or patch series, you will first want to (force-)push to the same branch. You probably also want to modify your Pull Request description (or title). It is a good idea to summarize the revision by adding something like this to the cover letter (read: by editing the first comment on the PR, i.e. the PR description):

Changes since v1:
- Fixed a typo in the commit message (found by ...)
- Added a code comment to ... as suggested by ...
...

To send a new iteration, just add another PR comment with the contents: /submit.

Need help?

New contributors who want advice are encouraged to join git-mentoring@googlegroups.com, where volunteers who regularly contribute to Git are willing to answer newbie questions, give advice, or otherwise provide mentoring to interested contributors. You must join in order to post or view messages, but anyone can join.

You may also be able to find help in real time in the developer IRC channel, #git-devel on Libera Chat. Remember that IRC does not support offline messaging, so if you send someone a private message and log out, they cannot respond to you. The scrollback of #git-devel is archived, though.

@Ikke
Copy link
Contributor

Ikke commented Aug 26, 2021

/allow

@gitgitgadget-git
Copy link

Error: User Ikke is not permitted to use GitGitGadget

@Ikke
Copy link
Contributor

Ikke commented Aug 26, 2021

@dscho Apparently I'm not allowed yet?

@dscho
Copy link
Member

dscho commented Aug 26, 2021

/allow Ikke

@gitgitgadget-git
Copy link

User Ikke is now allowed to use GitGitGadget.

WARNING: Ikke has no public email address set on GitHub

@dscho
Copy link
Member

dscho commented Aug 26, 2021

I think /allow is case-sensitive. @Ikke can you try again?

@Ikke
Copy link
Contributor

Ikke commented Aug 26, 2021

/allow

@gitgitgadget-git
Copy link

User mugdhapattnaik is now allowed to use GitGitGadget.

WARNING: mugdhapattnaik has no public email address set on GitHub

@mugdhapattnaik
Copy link
Contributor Author

/preview

@gitgitgadget-git
Copy link

Error: Could not determine public email of mugdhapattnaik

@mugdhapattnaik
Copy link
Contributor Author

/preview

@gitgitgadget-git
Copy link

Preview email sent as pull.1078.git.git.1630002587066.gitgitgadget@gmail.com

@mugdhapattnaik
Copy link
Contributor Author

/submit

@gitgitgadget-git
Copy link

Submitted as pull.1078.git.git.1630002794889.gitgitgadget@gmail.com

To fetch this version into FETCH_HEAD:

git fetch https://github.com/gitgitgadget/git pr-git-1078/mugdhapattnaik/submodule-deinit-absorbgitdirs-v1

To fetch this version to local tag pr-git-1078/mugdhapattnaik/submodule-deinit-absorbgitdirs-v1:

git fetch --no-tags https://github.com/gitgitgadget/git tag pr-git-1078/mugdhapattnaik/submodule-deinit-absorbgitdirs-v1

@mugdhapattnaik
Copy link
Contributor Author

/preview

@gitgitgadget-git
Copy link

Preview email sent as pull.1078.v2.git.git.1630043734279.gitgitgadget@gmail.com

@mugdhapattnaik
Copy link
Contributor Author

/submit

@gitgitgadget-git
Copy link

Submitted as pull.1078.v2.git.git.1630044219145.gitgitgadget@gmail.com

To fetch this version into FETCH_HEAD:

git fetch https://github.com/gitgitgadget/git pr-git-1078/mugdhapattnaik/submodule-deinit-absorbgitdirs-v2

To fetch this version to local tag pr-git-1078/mugdhapattnaik/submodule-deinit-absorbgitdirs-v2:

git fetch --no-tags https://github.com/gitgitgadget/git tag pr-git-1078/mugdhapattnaik/submodule-deinit-absorbgitdirs-v2

@gitgitgadget-git
Copy link

On the Git mailing list, Bagas Sanjaya wrote (reply to this):

On 27/08/21 01.33, Mugdha Pattnaik via GitGitGadget wrote:
> Currently, running 'git submodule deinit' on repos where the
> submodule's '.git' is a folder aborts with a message that is not
> exactly user friendly. Let's change this to instead warn the user
> to rerun the command with '--force'.

Maybe the case of "repo inside the repo", with submodule as repo?

-- 
An old man doll... just what I always wanted! - Clara

@gitgitgadget-git
Copy link

User Bagas Sanjaya <bagasdotme@gmail.com> has been added to the cc: list.

@gitgitgadget-git
Copy link

On the Git mailing list, Mugdha Pattnaik wrote (reply to this):

On Fri, Aug 27, 2021 at 1:21 PM Bagas Sanjaya <bagasdotme@gmail.com> wrote:
> Maybe the case of "repo inside the repo", with submodule as repo?

I am not certain what exactly you meant, but this patch deals with "Old-form"
submodules. This link (https://git-scm.com/docs/gitsubmodules#_forms)
states that old-style submodules, when deinitialized or deleted, have its Git
directory automatically moved to $GIT_DIR/modules/<name>/ of the
superproject. This is what this patch sets to achieve. Earlier, running deinit
on such a submodule would cause it to fail.

--
Mugdha

@gitgitgadget-git
Copy link

On the Git mailing list, Atharva Raykar wrote (reply to this):


"Mugdha Pattnaik via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: mugdha <mugdhapattnaik@gmail.com>
>
> Currently, running 'git submodule deinit' on repos where the
> submodule's '.git' is a folder aborts with a message that is not
> exactly user friendly. Let's change this to instead warn the user
> to rerun the command with '--force'.

This makes sense, a lot of commands seem to follow this pattern of
requiring a user to '--force' when the behaviour might not be different
from what is normally expected.

> This internally calls 'absorb_git_dir_into_superproject()', which
> moves the '.git' folder into the superproject and replaces it with
> a '.git' file. The rest of the deinit function can operate as it
> already does with new-style submodules.

Nice. Just like what the NEEDSWORK comment suggested.

> We also edit a test case such that it matches the new behaviour of
> deinit.
>
> Suggested-by: Atharva Raykar <raykar.ath@gmail.com>
> Signed-off-by: Mugdha Pattnaik <mugdhapattnaik@gmail.com>
> ---
>     submodule: absorb git dir instead of dying on deinit
>
>     We also edit a test case such that it matches the new behaviour of
>     deinit.
>
>     I have changed the 'cp -R ../.git/modules/example .git' to 'mv
>     ../.git/modules/example .git' since, at the time of testing, the test
>     would fail - deinit now would be moving the '.git' folder into the
>     superproject's '.git/modules/' folder, and since this same folder
>     already existed before, it was causing errors. So, before running
>     deinit, instead of copying the '.git' folder into the submodule, if we
>     move it there instead, this functionality can be appropriately tested.
>
>     Changes since v1:
>
>      * Removed extra indent within the if statements
>      * Moved absorb_git_dir_into_superproject() call outside the if
>        condition checking for --quiet flag
>
>     Thank you, Mugdha
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1078%2Fmugdhapattnaik%2Fsubmodule-deinit-absorbgitdirs-v2
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1078/mugdhapattnaik/submodule-deinit-absorbgitdirs-v2
> Pull-Request: https://github.com/git/git/pull/1078
>
> Range-diff vs v1:
>
>  1:  58814531d17 ! 1:  37c9b598fde submodule: absorb git dir instead of dying on deinit
>      @@ builtin/submodule--helper.c: static void deinit_submodule(const char *path, cons
>       -			    displaypath);
>       +		if (is_directory(sub_git_dir)) {
>       +			if (!(flags & OPT_FORCE))
>      -+					die(_("Submodule work tree '%s' contains a "
>      -+						  ".git directory (use --force if you want "
>      -+						  "to move its contents to superproject's "
>      -+						  "module folder and convert .git to a file "
>      -+						  "and then proceed with deinit)"),
>      ++				die(_("Submodule work tree '%s' contains a "
>      ++					  ".git directory.\nUse --force if you want "
>      ++					  "to move its contents to superproject's "
>      ++					  "module folder and convert .git to a file "
>      ++					  "and then proceed with deinit."),
>      ++					displaypath);
>      ++
>      ++			if (!(flags & OPT_QUIET))
>      ++				warning(_("Submodule work tree '%s' contains a .git "
>      ++						  "directory. This will be replaced with a "
>      ++						  ".git file by using absorbgitdirs."),
>       +						displaypath);
>       +
>      -+			if (!(flags & OPT_QUIET)) {
>      -+					warning(_("Submodule work tree '%s' contains a .git "
>      -+							  "directory (this will be replaced with a "
>      -+							  ".git file by using absorbgitdirs"),
>      -+							displaypath);
>      -+					absorb_git_dir_into_superproject(displaypath, flags);
>      -+			}
>      ++			absorb_git_dir_into_superproject(displaypath, flags);
>      ++
>       +		}
>
>        		if (!(flags & OPT_FORCE)) {
>
>
>  builtin/submodule--helper.c | 28 ++++++++++++++++++----------
>  t/t7400-submodule-basic.sh  | 10 +++++-----
>  2 files changed, 23 insertions(+), 15 deletions(-)
>
> diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
> index ef2776a9e45..4730dc141d4 100644
> --- a/builtin/submodule--helper.c
> +++ b/builtin/submodule--helper.c
> @@ -1539,16 +1539,24 @@ static void deinit_submodule(const char *path, const char *prefix,
>  		struct strbuf sb_rm = STRBUF_INIT;
>  		const char *format;
>
> -		/*
> -		 * protect submodules containing a .git directory
> -		 * NEEDSWORK: instead of dying, automatically call
> -		 * absorbgitdirs and (possibly) warn.
> -		 */
> -		if (is_directory(sub_git_dir))
> -			die(_("Submodule work tree '%s' contains a .git "
> -			      "directory (use 'rm -rf' if you really want "
> -			      "to remove it including all of its history)"),
> -			    displaypath);
> +		if (is_directory(sub_git_dir)) {
> +			if (!(flags & OPT_FORCE))
> +				die(_("Submodule work tree '%s' contains a "
> +					  ".git directory.\nUse --force if you want "
> +					  "to move its contents to superproject's "
> +					  "module folder and convert .git to a file "
> +					  "and then proceed with deinit."),
> +					displaypath);
> +
> +			if (!(flags & OPT_QUIET))
> +				warning(_("Submodule work tree '%s' contains a .git "
> +						  "directory. This will be replaced with a "
> +						  ".git file by using absorbgitdirs."),
> +						displaypath);
> +
> +			absorb_git_dir_into_superproject(displaypath, flags);
> +
> +		}

Looks okay to me. The quiet flag suppresses the warning, which is nice.

>  		if (!(flags & OPT_FORCE)) {
>  			struct child_process cp_rm = CHILD_PROCESS_INIT;
> diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
> index cb1b8e35dbf..3df71478d06 100755
> --- a/t/t7400-submodule-basic.sh
> +++ b/t/t7400-submodule-basic.sh
> @@ -1182,18 +1182,18 @@ test_expect_success 'submodule deinit is silent when used on an uninitialized su
>  	rmdir init example2
>  '
>
> -test_expect_success 'submodule deinit fails when submodule has a .git directory even when forced' '
> +test_expect_success 'submodule deinit fails when submodule has a .git directory unless forced' '
>  	git submodule update --init &&
>  	(
>  		cd init &&
>  		rm .git &&
> -		cp -R ../.git/modules/example .git &&
> +		mv ../.git/modules/example .git &&

The original test case was written with the expectation that the deinit
won't happen. But now that it will, I suppose an mv was necessary so
that absorbgitdirs can write the gitdir back to the original place
successfully.

>  		GIT_WORK_TREE=. git config --unset core.worktree
>  	) &&
>  	test_must_fail git submodule deinit init &&
> -	test_must_fail git submodule deinit -f init &&
> -	test -d init/.git &&
> -	test -n "$(git config --get-regexp "submodule\.example\.")"
> +	git submodule deinit -f init &&
> +	! test -d init/.git &&
> +	test -z "$(git config --get-regexp "submodule\.example\.")"
>  '

Likewise here. The test case has been flipped to reflect the new
behaviour.

>  test_expect_success 'submodule with UTF-8 name' '
>
> base-commit: c4203212e360b25a1c69467b5a8437d45a373cac

BTW, I see you linked downthread the documentation[1] which says:

  When [old-form submodules] deinitialized or deleted (see below), the
  submodule’s Git directory is automatically moved to
  $GIT_DIR/modules/<name>/ of the superproject.

This was not what Git was doing before this patch, it used to die() out
instead. So I think this actually is a bug fix (although I am not sure
why the test suite also did not agree with the documentation).

Either way, I think this is a welcome change. Thanks for the patch!

[1] https://git-scm.com/docs/gitsubmodules#_forms

@gitgitgadget-git
Copy link

User Atharva Raykar <raykar.ath@gmail.com> has been added to the cc: list.

@gitgitgadget-git
Copy link

On the Git mailing list, Junio C Hamano wrote (reply to this):

Atharva Raykar <raykar.ath@gmail.com> writes:

> "Mugdha Pattnaik via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
>> From: mugdha <mugdhapattnaik@gmail.com>
>>
>> Currently, running 'git submodule deinit' on repos where the
>> submodule's '.git' is a folder aborts with a message that is not
>> exactly user friendly. Let's change this to instead warn the user
>> to rerun the command with '--force'.
>
> This makes sense, a lot of commands seem to follow this pattern of
> requiring a user to '--force' when the behaviour might not be different
> from what is normally expected.
>
>> This internally calls 'absorb_git_dir_into_superproject()', which
>> moves the '.git' folder into the superproject and replaces it with
>> a '.git' file. The rest of the deinit function can operate as it
>> already does with new-style submodules.
>
> Nice. Just like what the NEEDSWORK comment suggested.

Indeed.  Many use of the word "folder", especially when the thing is
called "git dir" in the title, irritates me, though.  We use files
and directories, not folders.

> BTW, I see you linked downthread the documentation[1] which says:
>
>   When [old-form submodules] deinitialized or deleted (see below), the
>   submodule’s Git directory is automatically moved to
>   $GIT_DIR/modules/<name>/ of the superproject.
>
> This was not what Git was doing before this patch, it used to die() out
> instead. So I think this actually is a bug fix (although I am not sure
> why the test suite also did not agree with the documentation).

Curious.

I see the description was added by d4803455 (submodules: overhaul
documentation, 2017-06-22), which claimed to "detangle" by "move"
various existing pieces of documentation into a new file.

I guess we added a wish without marking it as such ;-)

@mugdhapattnaik
Copy link
Contributor Author

/submit

@gitgitgadget-git
Copy link

Submitted as pull.1078.v3.git.git.1630087821429.gitgitgadget@gmail.com

To fetch this version into FETCH_HEAD:

git fetch https://github.com/gitgitgadget/git pr-git-1078/mugdhapattnaik/submodule-deinit-absorbgitdirs-v3

To fetch this version to local tag pr-git-1078/mugdhapattnaik/submodule-deinit-absorbgitdirs-v3:

git fetch --no-tags https://github.com/gitgitgadget/git tag pr-git-1078/mugdhapattnaik/submodule-deinit-absorbgitdirs-v3

@gitgitgadget-git
Copy link

There was a status update in the "Cooking" section about the branch mp/absorb-submodule-git-dir-upon-deinit on the Git mailing list:

"git submodule deinit" for a submodule whose .git metadata
directory is embedded in its working tree refused to work, until
the submodule gets converted to use the "absorbed" form where the
metadata directory is stored in superproject, and a gitfile at the
top-level of the working tree of the submodule points at it.  The
command is taught to convert such submodules to the absorbed form
as needed.

Will merge to 'next'?

@gitgitgadget-git
Copy link

This patch series was integrated into seen via 89fcda5.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via 9d5336d.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via 68d71ee.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via f752105.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via e0902d6.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via 2cca704.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via 6bde046.

@gitgitgadget-git
Copy link

There was a status update in the "Cooking" section about the branch mp/absorb-submodule-git-dir-upon-deinit on the Git mailing list:

"git submodule deinit" for a submodule whose .git metadata
directory is embedded in its working tree refused to work, until
the submodule gets converted to use the "absorbed" form where the
metadata directory is stored in superproject, and a gitfile at the
top-level of the working tree of the submodule points at it.  The
command is taught to convert such submodules to the absorbed form
as needed.

Will merge to 'next'?

@gitgitgadget-git
Copy link

This patch series was integrated into seen via 1cf4c48.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via 4d508ce.

@gitgitgadget-git
Copy link

There was a status update in the "Cooking" section about the branch mp/absorb-submodule-git-dir-upon-deinit on the Git mailing list:

"git submodule deinit" for a submodule whose .git metadata
directory is embedded in its working tree refused to work, until
the submodule gets converted to use the "absorbed" form where the
metadata directory is stored in superproject, and a gitfile at the
top-level of the working tree of the submodule points at it.  The
command is taught to convert such submodules to the absorbed form
as needed.

Will merge to 'next'?

@gitgitgadget-git
Copy link

This patch series was integrated into seen via ee64f44.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via 7f699a7.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via cd56e61.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via b43bad2.

@gitgitgadget-git
Copy link

This patch series was integrated into next via afc462a.

@gitgitgadget-git gitgitgadget-git bot added the next label Dec 3, 2021
@gitgitgadget-git
Copy link

There was a status update in the "Cooking" section about the branch mp/absorb-submodule-git-dir-upon-deinit on the Git mailing list:

"git submodule deinit" for a submodule whose .git metadata
directory is embedded in its working tree refused to work, until
the submodule gets converted to use the "absorbed" form where the
metadata directory is stored in superproject, and a gitfile at the
top-level of the working tree of the submodule points at it.  The
command is taught to convert such submodules to the absorbed form
as needed.

Will merge to 'master'.
source: <pull.1078.v7.git.git.1637319387717.gitgitgadget@gmail.com>

@gitgitgadget-git
Copy link

This patch series was integrated into seen via e661234.

@gitgitgadget-git
Copy link

This patch series was integrated into seen via c3c1a6f.

@gitgitgadget-git
Copy link

There was a status update in the "Cooking" section about the branch mp/absorb-submodule-git-dir-upon-deinit on the Git mailing list:

"git submodule deinit" for a submodule whose .git metadata
directory is embedded in its working tree refused to work, until
the submodule gets converted to use the "absorbed" form where the
metadata directory is stored in superproject, and a gitfile at the
top-level of the working tree of the submodule points at it.  The
command is taught to convert such submodules to the absorbed form
as needed.

Will merge to 'master'.
source: <pull.1078.v7.git.git.1637319387717.gitgitgadget@gmail.com>

@gitgitgadget-git
Copy link

This patch series was integrated into seen via 6e8800a.

@gitgitgadget-git
Copy link

There was a status update in the "Graduated to 'master'" section about the branch mp/absorb-submodule-git-dir-upon-deinit on the Git mailing list:

"git submodule deinit" for a submodule whose .git metadata
directory is embedded in its working tree refused to work, until
the submodule gets converted to use the "absorbed" form where the
metadata directory is stored in superproject, and a gitfile at the
top-level of the working tree of the submodule points at it.  The
command is taught to convert such submodules to the absorbed form
as needed.
source: <pull.1078.v7.git.git.1637319387717.gitgitgadget@gmail.com>

@gitgitgadget-git
Copy link

This patch series was integrated into seen via 670703e.

@gitgitgadget-git
Copy link

This patch series was integrated into next via 670703e.

@gitgitgadget-git
Copy link

This patch series was integrated into master via 670703e.

@gitgitgadget-git
Copy link

Closed via 670703e.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants