You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by gu...@apache.org on 2019/03/26 12:14:25 UTC

[spark] branch master updated: [SPARK-27277][INFRA] Recover from setting fix version failure in merge script

This is an automated email from the ASF dual-hosted git repository.

gurwls223 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git


The following commit(s) were added to refs/heads/master by this push:
     new 0e16a6f  [SPARK-27277][INFRA] Recover from setting fix version failure in merge script
0e16a6f is described below

commit 0e16a6f5b0e9405feb0b00bd61e548ec167cc8b3
Author: Hyukjin Kwon <gu...@apache.org>
AuthorDate: Tue Mar 26 21:14:07 2019 +0900

    [SPARK-27277][INFRA] Recover from setting fix version failure in merge script
    
    ## What changes were proposed in this pull request?
    
    I happened to meet this case few times before:
    
    ```
    Enter comma-separated fix version(s) [3.0.0]: 3.0,0
    Restoring head pointer to master
    git checkout master
    Already on 'master'
    git branch
    Traceback (most recent call last):
      File "./dev/merge_spark_pr_jira.py", line 537, in <module>
        main()
      File "./dev/merge_spark_pr_jira.py", line 523, in main
        resolve_jira_issues(title, merged_refs, jira_comment)
      File "./dev/merge_spark_pr_jira.py", line 359, in resolve_jira_issues
        resolve_jira_issue(merge_branches, comment, jira_id)
      File "./dev/merge_spark_pr_jira.py", line 302, in resolve_jira_issue
        jira_fix_versions = map(lambda v: get_version_json(v), fix_versions)
      File "./dev/merge_spark_pr_jira.py", line 302, in <lambda>
        jira_fix_versions = map(lambda v: get_version_json(v), fix_versions)
      File "./dev/merge_spark_pr_jira.py", line 300, in get_version_json
        return filter(lambda v: v.name == version_str, versions)[0].raw
    IndexError: list index out of range
    ```
    
    I typed the fix version wrongly (there's comma in `3.0,0`) and it ended the loop in the merge script. Not a big deal but it bugged me few times. Finally I met this today again, and decided to fix.
    
    This PR proposes to recover from wrongly set fix versions.
    
    ## How was this patch tested?
    
    I manually copied and pasted the specific codes and tested separately in both Python 2 and Python 3.
    
    **Positive cases:**
    
    ```
    Enter comma-separated fix version(s) [3.0.0]:  # blank test (to use default)
    ['3.0.0']
    ```
    
    ```
    Enter comma-separated fix version(s) [3.0.0,2.4.2]:  # multiple default versions
    ['3.0.0', '2.4.2']
    ```
    
    ```
    Enter comma-separated fix version(s) [3.0.0]: 2.4.1  # valid version
    ['2.4.1']
    ```
    
    ```
    Enter comma-separated fix version(s) [3.0.0]: 3.0.0,2.4.2  # multiple valid versions
    ['3.0.0', '2.4.2']
    ```
    
    **Keyboard interrupt(Ctrl + c):**
    
    ```
    Enter comma-separated fix version(s) [3.0.0]: ^CTraceback (most recent call last):  # keyboard interrupt
      File "test_merge_script.py", line 45, in <module>
        test()
      File "test_merge_script.py", line 26, in test
        fix_versions = input("Enter comma-separated fix version(s) [%s]: " % default_fix_versions)
    KeyboardInterrupt
    ```
    
    **Wrongly typed versions (recovered):**
    
    ```
    Enter comma-separated fix version(s) [3.0.0]: 3.1
    Specified version(s) [3.1] not found in the available versions, try again (or leave blank and fix manually).
    Enter comma-separated fix version(s) [3.0.0]: 123
    Specified version(s) [123] not found in the available versions, try again (or leave blank and fix manually).
    Enter comma-separated fix version(s) [3.0.0]: 3.0,0
    Specified version(s) [3.0, 0] not found in the available versions, try again (or leave blank and fix manually).
    Enter comma-separated fix version(s) [3.0.0]: damn
    Specified version(s) [damn] not found in the available versions, try again (or leave blank and fix manually).
    Enter comma-separated fix version(s) [3.0.0]: 3.0.0,2.5.2  # one invalid versions in multiple versions
    Specified version(s) [3.0.0, 2.5.2] not found in the available versions, try again (or leave blank and fix manually).
    ```
    
    **Arbitrary exceptions in fix version parsing (recovered)**
    
    ```
    Enter comma-separated fix version(s) [3.0.0]:
    Traceback (most recent call last):
      File "tmp.py", line 11, in <module>
        raise Exception("arbitrary exception")
    Exception: arbitrary exception
    Error setting fix version(s), try again (or leave blank and fix manually)
    Enter comma-separated fix version(s) [3.0.0]:
    Traceback (most recent call last):
      File "tmp.py", line 10, in <module>
        raise Exception("arbitrary exception")
    Exception: arbitrary exception
    Error setting fix version(s), try again (or leave blank and fix manually)
    Enter comma-separated fix version(s) [3.0.0]:
    ```
    
    Closes #24213 from HyukjinKwon/merge_script_fix_version.
    
    Authored-by: Hyukjin Kwon <gu...@apache.org>
    Signed-off-by: Hyukjin Kwon <gu...@apache.org>
---
 dev/merge_spark_pr.py | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/dev/merge_spark_pr.py b/dev/merge_spark_pr.py
index cca6f40..593e349 100755
--- a/dev/merge_spark_pr.py
+++ b/dev/merge_spark_pr.py
@@ -289,10 +289,24 @@ def resolve_jira_issue(merge_branches, comment, default_jira_id=""):
                 default_fix_versions = filter(lambda x: x != v, default_fix_versions)
     default_fix_versions = ",".join(default_fix_versions)
 
-    fix_versions = input("Enter comma-separated fix version(s) [%s]: " % default_fix_versions)
-    if fix_versions == "":
-        fix_versions = default_fix_versions
-    fix_versions = fix_versions.replace(" ", "").split(",")
+    available_versions = set(map(lambda v: v.name, versions))
+    while True:
+        try:
+            fix_versions = input(
+                "Enter comma-separated fix version(s) [%s]: " % default_fix_versions)
+            if fix_versions == "":
+                fix_versions = default_fix_versions
+            fix_versions = fix_versions.replace(" ", "").split(",")
+            if set(fix_versions).issubset(available_versions):
+                break
+            else:
+                print("Specified version(s) [%s] not found in the available versions, try "
+                      "again (or leave blank and fix manually)." % (", ".join(fix_versions)))
+        except KeyboardInterrupt:
+            raise
+        except:
+            traceback.print_exc()
+            print("Error setting fix version(s), try again (or leave blank and fix manually)")
 
     def get_version_json(version_str):
         return filter(lambda v: v.name == version_str, versions)[0].raw


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org