【问题标题】:java: using ssh command tom make multi-line comments on gerritjava: 使用 ssh 命令 tom 对 gerrit 进行多行注释
【发布时间】:2012-07-30 08:03:10
【问题描述】:

例如当我使用shell发布gerrit的评论时,

ssh -p 29418 gerritlink gerrit review --verified=0 '--message=[FAILURE] COMMIT MESSAGE CHECK FAIL。

PCPID 不存在。

A360-ID 不存在。 d9a5d29799ada8237679efd1121cd7e3a85f333d

这在 gerrit cmets 中运行良好,您可以在那里看到多行。 但是当我使用java调用命令时,所有的语句都在一行中。 如何在 java 中制作多行的 cmets?

【问题讨论】:

  • gerrit 你的库是用来和你的存储库通信的吗?一个非常快速的谷歌搜索说它是一个基于网络的代码管理工具。请向我们展示一些代码,以便在此处为您提供帮助。
  • gerrit_message = "[失败] 提交消息检查失败。" + "\r\n\r\n" + message_PCP + "\r\n\r\n" + message_A360; runCmd("ssh -p 29418 gerrit.com gerrit review --verified=0 '--message=" + gerrit_message + "\' " + strGERRIT_PATCHSET_REVISION, 监听器, 工作区);当我在 shell 中运行这个命令时,它适用于多行;在java运行之后所有的句子都在一行中。
  • 顺便说一句,runCmd 只是调用shell命令的方法,这里粘贴太长了
  • 在不同的命令之间尝试分号(即 ';' 或 '&&' 不带引号)。

标签: java ssh multiline gerrit


【解决方案1】:

我很确定这是否会有所帮助,但您可以尝试使用 ;&& 分隔您的命令。

【讨论】:

    【解决方案2】:

    这里有两个对我有用的解决方案:

    1. Gerrit 折叠单个换行符,所以使用双换行符 "\n\n" 而不是“\r\n”。
    2. 在每行前面加上空格,这将说服 Gerrit 将它们显示为单独的等距行。该段落使用 HTML 预样式进行格式化,这对于代码示例很有用。

    来源:Re: Multiline comments in gerritComment formatting

    我还必须使用 ProcessBuilder 运行 ssh 命令才能使上述解决方案发挥作用。

    例如使用解决方案 #1 发送消息:

    String solution1_msg = "Test1\n\nThis is a test\n\nTesting has completed"
    String solution2_msg = "Test2\n   This is a test\n   Testing has completed"
    
    ProcessBuilder pb = new ProcessBuilder("ssh", "-p", "29418", "<gerrit server>",
        "gerrit", "review", "--message=\"" + solution1_message + "\"commit SHA-1>");
    pb.redirectErrorStream(); //redirect stderr to stdout
    Process process = pb.start();
    InputStream inputStream = process.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    String line = null;
    while((line = reader.readLine())!= null) {
      System.out.println(line);
    }
    process.waitFor();
    

    同样的代码也适用于解决方案 #2;将solution2_message 作为消息传递,而不是solution1_message

    来源:How do I run multiple commands in SSH through Java?

    【讨论】:

      【解决方案3】:

      我会在 shell 中解释它。问题与使用错误的引号有关。

      $> msg="- line1                               
      - line2
      - line3
      - line4"
      $> echo ${msg}
      $> - line1 - line2 - line3 - line4
      $> echo "${msg}"
      - line1
      - line2
      - line3
      - line4
      

      与 Gerrit 命令相同,您必须确保所需的引号位于所需的位置。

      ssh -p 29418 admin@localhost gerrit review 3,2 --project test -m "'"${msg}"'" --code-review 1
      

      管理员 补丁集 2:

      • 你好 - wordl - line3 - line4
      ssh -p 29418 admin@localhost gerrit review 3,2 --project test -m "'""${msg}""'" --code-review 1
      
      

      管理员 补丁集 2:

      • 第一行
      • 第2行
      • 第 3 行
      • 第 4 行

      【讨论】:

        猜你喜欢
        • 2021-12-21
        • 1970-01-01
        • 2010-11-30
        • 1970-01-01
        • 2010-10-08
        • 2017-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多