git-p4: fix two undefined variables
cover git-p4: fix two undefined variables
Moritz Baumann (2):
git-p4: fix typo in P4Submit.applyCommit()
git-p4: fix error handling in P4Unshelve.renameBranch()
git-p4.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
base-commit: bbea4dcf42b28eb7ce64a6306cdde875ae5d09ca
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1297%2Fmbs-c%2Ffix-undefined-variables-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1297/mbs-c/fix-undefined-variables-v1
Pull-Request: https://github.com/git/git/pull/1297
Signature · 1 line
gitgitgadget
PATCH 1/2 git-p4: fix typo in P4Submit.applyCommit()
From: Moritz Baumann <[email protected]>
--- git-p4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
git-p4.py +1 -1
@@ -2226,7 +2226,7 @@ class P4Submit(Command, P4UserMap): raw=True): if regexp.search(line): if verbose: - print("got keyword match on %s in %s in %s" % (regex.pattern, line, file)) + print("got keyword match on %s in %s in %s" % (regexp.pattern, line, file)) kwfiles[file] = regexp break
Signature · 1 line
gitgitgadget
Re: [PATCH 1/2] git-p4: fix typo in P4Submit.applyCommit()
Quoted 12 lines · Moritz Baumann via GitGitGadget
From: Moritz Baumann <[email protected]>
Signed-off-by Moritz Baumann <[email protected]>--- git-p4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)git-p4.py +0
-0
git-p4.py class P4Submit(Command, P4UserMap): · line 2229
Quoted 5 lines
git-p4.py +1
-1@@ -2226,7 +2226,7 @@ class P4Submit(Command, P4UserMap): raw=True): if regexp.search(line): if verbose: - print("got keyword match on %s in %s in %s" % (regex.pattern, line, file)) + print("got keyword match on %s in %s in %s" % (regexp.pattern, line, file))
OK. That's an obvious fix.
Quoted 2 lines
git-p4.py +0
-0kwfiles[file] = regexp break
PATCH 2/2 git-p4: fix error handling in P4Unshelve.renameBranch()
In reply to Moritz Baumann via GitGitGadgetFrom: Moritz Baumann <[email protected]>
The error handling code referenced a variable that does not exist. Also, the condition could never evaluate to True.
--- git-p4.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
git-p4.py +2 -5
@@ -4369,19 +4369,16 @@ class P4Unshelve(Command): def renameBranch(self, branch_name): """Rename the existing branch to branch_name.N .""" - found = True for i in range(0, 1000): backup_branch_name = "{0}.{1}".format(branch_name, i) if not gitBranchExists(backup_branch_name): # Copy ref to backup gitUpdateRef(backup_branch_name, branch_name) gitDeleteRef(branch_name) - found = True print("renamed old unshelve branch to {0}".format(backup_branch_name)) break - - if not found: - sys.exit("gave up trying to rename existing branch {0}".format(sync.branch)) + else: + sys.exit("gave up trying to rename existing branch {0}".format(branch_name)) def findLastP4Revision(self, starting_point): """Look back from starting_point for the first commit created by git-p4
Signature · 1 line
gitgitgadget
Re: [PATCH 2/2] git-p4: fix error handling in P4Unshelve.renameBranch()
Quoted 18 lines · Moritz Baumann via GitGitGadget
From: Moritz Baumann <[email protected]>
The error handling code referenced a variable that does not exist. Also, the condition could never evaluate to True.
Signed-off-by Moritz Baumann <[email protected]>--- git-p4.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)git-p4.py +0
-0
git-p4.py class P4Unshelve(Command): · line 4372
Quoted 4 lines
git-p4.py +0
-1@@ -4369,19 +4369,16 @@ class P4Unshelve(Command): def renameBranch(self, branch_name): """Rename the existing branch to branch_name.N .""" - found = True
This has to be initialized to False, because ...
git-p4.py class P4Unshelve(Command): · line 4378
Quoted 8 lines
git-p4.py +0
-1for i in range(0, 1000): backup_branch_name = "{0}.{1}".format(branch_name, i) if not gitBranchExists(backup_branch_name): # Copy ref to backup gitUpdateRef(backup_branch_name, branch_name) gitDeleteRef(branch_name) - found = True print("renamed old unshelve branch to {0}".format(backup_branch_name))
... we flip it to True when we find an available unused name and break out ...
git-p4.py class P4Unshelve(Command): · line 4384
Quoted 4 lines
git-p4.py +0
-3break - - if not found: - sys.exit("gave up trying to rename existing branch {0}".format(sync.branch))
... so that we can complain when we didn't find anything usable.
So a minimum fix would be to initialize found correctly, and rewriting the logic to use "for ... else" is an unrelated style change. The version using "for ... else" may be more idiomatic Python, and I do not think people would mind it, but it should be mentioned in the proposed log mesage, perhaps like:
The code tries to see if there is an available name by setting the variable 'found' to true when it finds one and breaks out of the loop, but because the variable is incorrectly initialized to true (it should be initialized to false), the code after the loop cannot tell if it found an available name or not.
It would be the minimal fix to initialize the variable to false, but in modern Python it is more idiomatic to add else: clause after a loop to write what happens when the loop did not break out, so let's do that instead.
Also, fix the error message that refers to a wrong variable name.
or something.
Thanks. Will queue.
Quoted 5 lines
git-p4.py +2
-0+ else: + sys.exit("gave up trying to rename existing branch {0}".format(branch_name)) def findLastP4Revision(self, starting_point): """Look back from starting_point for the first commit created by git-p4
Re: [PATCH 2/2] git-p4: fix error handling in P4Unshelve.renameBranch()
Quoted 17 lines · Junio C Hamano
Quoted 2 lines
- found = True
This has to be initialized to False, because ...
Quoted 8 lines
for i in
range(0, 1000):
backup_branch_name= "{0}.{1}".format(branch_name, i)
if notgitBranchExists(backup_branch_name):
# Copy ref to backup
gitUpdateRef(backup_branch_name, branch_name)gitDeleteRef(branch_name)
- found = True
print("renamed old unshelve branch to {0}".format(backup_branch_name))... we flip it to True when we find an available unused name and break out ...
Quoted 6 lines
git-p4.py class P4Unshelve(Command): · line 4384
Quoted 4 lines
break
git-p4.py +0
-3- - if not found: - sys.exit("gave up trying to rename existing branch {0}".format(sync.branch))... so that we can complain when we didn't find anything usable.
By the way, isn't this a typical time-of-check to time-of-use bug? Not the problem with the fix in the patch but in the original, but regardless of whose fault it is, it may be good to fix it (outside the topic of this patch).
Thanks.
RE: [PATCH 2/2] git-p4: fix error handling in P4Unshelve.renameBranch()
Thank you for your criticism, I will keep it in mind and submit more detailed descriptions in the future.
Quoted 3 lines
By the way, isn't this a typical time-of-check to time-of-use bug? Not the problem with the fix in the patch but in the original, but regardless of whose fault it is, it may be good to fix it (outside the topic of this patch).
Is concurrent use even meant to be supported in general? I have not done a thorough review, but judging from what I have seen so far, I highly doubt that the majority of git-p4.py was written with potential concurrency problems in mind.
Best regards,
Moritz
v2 cover git-p4: fix two undefined variables
In reply to Moritz Baumann via GitGitGadgetMoritz Baumann (2):
git-p4: fix typo in P4Submit.applyCommit()
git-p4: fix error handling in P4Unshelve.renameBranch()
git-p4.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
base-commit: bbea4dcf42b28eb7ce64a6306cdde875ae5d09ca
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1297%2Fmbs-c%2Ffix-undefined-variables-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1297/mbs-c/fix-undefined-variables-v2
Pull-Request: https://github.com/git/git/pull/1297
Range-diff vs v1:
1: 1484eee8961 = 1: 1484eee8961 git-p4: fix typo in P4Submit.applyCommit() 2: 69c9fd5fbec ! 2: f7566dd5fc3 git-p4: fix error handling in P4Unshelve.renameBranch()
@@ Metadata
## Commit message ##
git-p4: fix error handling in P4Unshelve.renameBranch()
- The error handling code referenced a variable that does not exist.
- Also, the condition could never evaluate to True.
+ The error handling code path is meant to be triggered when the loop does
+ not exit early via "break". This fails, as the boolean variable "found",
+ which is used to track whether the loop was exited early, is initialized
+ incorrectly.
+
+ It would be possible to fix this issue by correcting the initialization,
+ but Python supports a for:-else: control flow construct for this exact
+ use case (executing code if a loop does not exit early), so it is more
+ idiomatic to remove the tracking variable entirely.
+
+ In addition, the error message no longer refers to a variable that does
+ not exist.
Signature · 1 line
gitgitgadget
PATCH v2 1/2 git-p4: fix typo in P4Submit.applyCommit()
From: Moritz Baumann <[email protected]>
--- git-p4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
git-p4.py +1 -1
@@ -2226,7 +2226,7 @@ class P4Submit(Command, P4UserMap): raw=True): if regexp.search(line): if verbose: - print("got keyword match on %s in %s in %s" % (regex.pattern, line, file)) + print("got keyword match on %s in %s in %s" % (regexp.pattern, line, file)) kwfiles[file] = regexp break
Signature · 1 line
gitgitgadget
PATCH v2 2/2 git-p4: fix error handling in P4Unshelve.renameBranch()
In reply to Moritz Baumann via GitGitGadgetFrom: Moritz Baumann <[email protected]>
The error handling code path is meant to be triggered when the loop does not exit early via "break". This fails, as the boolean variable "found", which is used to track whether the loop was exited early, is initialized incorrectly.
It would be possible to fix this issue by correcting the initialization, but Python supports a for:-else: control flow construct for this exact use case (executing code if a loop does not exit early), so it is more idiomatic to remove the tracking variable entirely.
In addition, the error message no longer refers to a variable that does not exist.
--- git-p4.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
git-p4.py +2 -5
@@ -4369,19 +4369,16 @@ class P4Unshelve(Command): def renameBranch(self, branch_name): """Rename the existing branch to branch_name.N .""" - found = True for i in range(0, 1000): backup_branch_name = "{0}.{1}".format(branch_name, i) if not gitBranchExists(backup_branch_name): # Copy ref to backup gitUpdateRef(backup_branch_name, branch_name) gitDeleteRef(branch_name) - found = True print("renamed old unshelve branch to {0}".format(backup_branch_name)) break - - if not found: - sys.exit("gave up trying to rename existing branch {0}".format(sync.branch)) + else: + sys.exit("gave up trying to rename existing branch {0}".format(branch_name)) def findLastP4Revision(self, starting_point): """Look back from starting_point for the first commit created by git-p4
Signature · 1 line
gitgitgadget
Quoted 6 lines · Moritz Baumann via GitGitGadget
Moritz Baumann (2):
git-p4: fix typo inP4Submit.applyCommit()
git-p4: fix error handling inP4Unshelve.renameBranch()git-p4.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
Perfect. Thanks.