GSoC Week 2
A slow week
This week felt quite slow. I just got off with the conversion of ‘set-branch’ and figured out what problems were there with the collective effort of my mentors and mine (more on that in the following sections). The ‘set-url’ conversion and my contributions to gitFAQ just reached the master
branch of git/git, feels nice <3.
What I have inferred till now, is that communication is KEY. If anyone, even if you are a (to-be) GSoC student or a junior/friend of mine reading this, one thing you should never forget is communicating about the problems you are facing with someone senior and more experienced than you. What you are facing right now, there’s a really high chance that they might’ve faced something similar (if not identical) before.
The above paragraph kinda sums up how I finished the conversion of set-branch
. So going into detail:
What had happened?
If you read the previous blog, you may have noticed what problem I had faced back then. Quoting from the last blog:
I discovered this while debugging the errors, by doing a
cat .gitmodules
, observing that an entry was never even made in the first place for thebranch
And,
… my goal now is to create a mechanism which will make a
submodule.<name>.branch
entry in.gitmodules
if one does not exist and update it with the branch desired in the arguments of the subcommand
As you may observe, the naive me thought that there was a problem in inserting an entry into the .gitmodules
file and hence I embarked on a quest to create a “mechanism” to do so. But guess what, this wasn’t even the problem in the first place. Want to know what happened? Let’s move to the next section.
The Real Problem
So, the real problem actually was with the option parsing. You see, what parse_options
does is filter out the optional arguments and the non-option arguments (such as filenames, branch names, etc.) and modify the argv[]
array and argc
appropriately. When I had debugged their values (using a WARNING message), I was stumped to see that an argument was missing… from the middle of the entered command!! The test command was (from t7419):
git submodule set-branch --branch topic submodule
The missing argument was topic
, thus making argc=1 (the only argument being submodule
). Now, after hours of debugging I was extremely confused and going around in circles until I mailed my mentors about the problem I was facing. Turns out, the error wasn’t in the C code but rather in the shell code. My mentor Christian sent me this Documentation about parameter substiution in BASH. And then I realised that at this line in the shell script:
git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper set-branch ${GIT_QUIET:+--quiet} ${branch:+--branch "$branch"} ${default:+--default} -- "$@"
I had missed out on the $branch
argument, due to which the C code never really accepted a branch. The statement ${branch:+--branch $branch}
, translates to: If branch
is set and is non-NULL, set it to $branch
(i.e., topic
in this case) else set it to -branch
. Had I not communicated with my mentors, I wouldn’t have been able to write this blog in the first place ;)
Next Steps
The conversion is done with. Now I will submit a v2 for review shortly after getting some advice from my mentors regarding my changes. This will mark the end of my subproject 1 (SP1) of GSoC. My next goal is the conversion of subcommand summary
from shell to C.
Stay home, stay safe! ;)
Over and out,
Shourya Shukla
Comments
Post a Comment