From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Shourya Shukla <shouryashukla.oo@gmail.com>
Cc: git@vger.kernel.org, gitster@pobox.com, peff@peff.net,
chriscool@tuxfamily.org
Subject: Re: [PATCH 1/1][RFC][GSoC] submodule: using 'is_writing_gitmodules_ok()' for a stricter check
Date: Thu, 13 Feb 2020 14:42:40 +0100 (CET) [thread overview]
Message-ID: <nycvar.QRO.7.76.6.2002131435301.46@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <20200211170359.31835-2-shouryashukla.oo@gmail.com>
Hi Shourya,
On Tue, 11 Feb 2020, Shourya Shukla wrote:
> The if conditions of the functions 'update_path_in_gitmodules()'
> and 'remove_path_from_gitmodules()' are not catering to every
> condition encountered by the function. On detailed observation,
> one can notice that .gitmodules cannot be changed (i.e. removal
> of a path or updation of a path) until these conditions are satisfied:
>
> 1. The file exists
> 2. The file, if it does not exist, should be absent from
> the index and other branches as well.
I don't think that other branches matter in this context.
> 3. There should not be any unmerged changes in the file.
> 4. The submodules do not exist or if the submodule name
> does not match.
>
> Only the conditions 1, 3 and 4 were being satisfied earlier. Now
> on changing the if statement in one of the places, the condition
> 2 is satisfied as well.
Let's see how this is done...
> Signed-off-by: Shourya Shukla <shouryashukla.oo@gmail.com>
> ---
> submodule.c | 16 ++++++++++++++--
> 1 file changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/submodule.c b/submodule.c
> index 3a184b66ab..f7836a6851 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -107,7 +107,13 @@ int update_path_in_gitmodules(const char *oldpath, const char *newpath)
> const struct submodule *submodule;
> int ret;
>
> - if (!file_exists(GITMODULES_FILE)) /* Do nothing without .gitmodules */
> + /* If .gitmodules file is not safe to write(update a path) i.e.
> + * if it does not exist or if it is not present in the working tree
> + * but lies in the index or in the current branch.
> + * The function 'is_writing_gitmodules_ok()' checks for the same.
> + * and exits with failure if above conditions are not satisfied
> + */
Style: we always begin and end multi-line comments with `/*` and `*/` on
their own line.
> + if (is_writing_gitmodules_ok())
Hmm. This function is defined thusly:
int is_writing_gitmodules_ok(void)
{
struct object_id oid;
return file_exists(GITMODULES_FILE) ||
(get_oid(GITMODULES_INDEX, &oid) < 0 && get_oid(GITMODULES_HEAD, &oid) < 0);
}
Aha! So this tries to ensure that the `.gitmodules` file exists on disk,
or if it does not, then it should not exist in the index nor in the
_current_ branch.
But we're in the function called `update_path_in_gitmodules()` which
suggests that we're working on an existing, valid `.gitmodules`.
So I do not think that we can proceed if `.gitmodules` is absent from
disk, even if in case that it is _also_ absent from the index and from the
current branch.
> return -1;
>
> if (is_gitmodules_unmerged(the_repository->index))
> @@ -136,7 +142,13 @@ int remove_path_from_gitmodules(const char *path)
> struct strbuf sect = STRBUF_INIT;
> const struct submodule *submodule;
>
> - if (!file_exists(GITMODULES_FILE)) /* Do nothing without .gitmodules */
> + /* If .gitmodules file is not safe to write(remove a path) i.e.
> + * if it does not exist or if it is not present in the working tree
> + * but lies in the index or in the current branch.
> + * The function 'is_writing_gitmodules_ok()' checks for the same.
> + * and exits with failure if above conditions are not satisfied
> + */
> + if (is_writing_gitmodules_ok())
Here, we want to remove a path from `.gitmodules`, so I think that the
same analysis applies as above.
In other words, I think that the existing code is correct and does not
need to be patched.
Ciao,
Johannes
> return -1;
>
> if (is_gitmodules_unmerged(the_repository->index))
> --
> 2.20.1
>
>
next prev parent reply other threads:[~2020-02-13 13:42 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-11 17:03 [PATCH 0/1] [RFC][GSoC] submodule: enforcing stricter checks Shourya Shukla
2020-02-11 17:03 ` [PATCH 1/1][RFC][GSoC] submodule: using 'is_writing_gitmodules_ok()' for a stricter check Shourya Shukla
2020-02-13 13:42 ` Johannes Schindelin [this message]
2020-02-13 16:38 ` Shourya Shukla
2020-02-14 13:28 ` Johannes Schindelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=nycvar.QRO.7.76.6.2002131435301.46@tvgsbejvaqbjf.bet \
--to=johannes.schindelin@gmx.de \
--cc=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=shouryashukla.oo@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).