RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 583693
Accepted
PinkTux
PinkTux
Asked:2020-10-28 03:04:16 +0000 UTC2020-10-28 03:04:16 +0000 UTC 2020-10-28 03:04:16 +0000 UTC

Gitlab CE:是否可以在合并请求 URL 中创建自定义标题?

  • 772

分支推送完成后,git给出创建合并请求的URL。它看起来像这样:

/merge_requests/new?merge_request[source_branch]=BRANCH_NAME

此 URL 会打开一个表单,您需要在其中填写各种字段。添加&merge_request[assignee_id]=ID到此 URL(请参阅Gitlab API)允许您在“分配给”选择中自动设置所需的值。但是如果你添加&merge_request[title]=TITLE,那么你的标题就不会被拾取。有可能以某种方式解决这个问题吗?

PS 原则上,您可以立即直接对gitlab 的offal 进行POST,如同一API 中所述。但是表单步骤不能跳过,它是必需的。我只是想用类比代替我的标题с assignee_id。

gitlab
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    PinkTux
    2020-10-28T18:55:08Z2020-10-28T18:55:08Z

    客户端的解决方案。它是为Tampermonkey / Chromium 编写的,但它似乎也适用于其他浏览器。打开表单时,合并请求会填充描述、主机和标题字段(如果已指定)。

    // ==UserScript==
    // @name         Gitlab Merge Request additions
    // @namespace    http://tampermonkey.net/
    // @version      0.5
    // @description  Add title, labels, description & assignee_id to merge request
    // @match        https://gitlab.*/merge_requests/new*
    // @run-at       document-start
    // @grant        none
    // ==/UserScript==
    
    (function() {
        'use strict';
    
        /* replace by own: */
        var ASSIGNEE_ID = "666";
        //var LABELS      = "фича";
        var DESCRIPTION = "Вставь описание, дундук!";
    
        /* based on http://stackoverflow.com/questions/8486099/ code */
        function parse_query_string() {
            var query = location.search.substr(1);
            var result = {};
            query.split("&").forEach(function(part) {
                if(!part) return;
                part = decodeURIComponent(part.split("+").join(" "));
                var eq = part.indexOf("=");
                var key = eq>-1 ? part.substr(0,eq) : part;
                var val = eq>-1 ? part.substr(eq+1) : "";
                var from = key.indexOf("[");
                if(from==-1) result[decodeURIComponent(key)] = val;
                else {
                    var to = key.indexOf("]");
                    var index = decodeURIComponent(key.substring(from+1,to));
                    key = decodeURIComponent(key.substring(0,from));
                    if(!result[key]) result[key] = [];
                    if(!index) result[key].push(val);
                    else result[key][index] = val;
                }
            });
            return result;
        }
    
        var q = parse_query_string();
        if( !q.merge_request || !q.merge_request.source_branch )
            return;
    
        /* 
         * Как правильно внедриться в DOM тут не придумал, поэтому
         * делаем редирект при необходимости добавить assignee_id 
         * (потому и @run-at document-start)
         */ 
        if( typeof ASSIGNEE_ID != "undefined" && parseInt(ASSIGNEE_ID) 
            && !q.merge_request.assignee_id ) {
            var loc = Object.keys(q.merge_request).map( function(key) {
                return "merge_request[" + key + "]=" + q.merge_request[key];
            }).join("&") + "&merge_request[assignee_id]=" + ASSIGNEE_ID;
            document.location.search = loc;
            return;
        }
    
        document.addEventListener("DOMContentLoaded", function() {
            var e = document.getElementById("merge_request_title");
            if( e ) {
                /* title = BRANCH_NAME - 'empty placeholder' */
                e.value = q.merge_request.source_branch + " - ''";
            }
    
            if( typeof LABELS != "undefined" ) {
                /* id может быть и другим! */
                e = document.getElementById("s2id_autogen3");
                if( e ) e.value = LABELS;
            }
    
            if( typeof DESCRIPTION != "undefined" ) {
                e = document.getElementById("merge_request_description");
                if( e ) e.value = DESCRIPTION;
            }
        });
    
    })();
    
    • 1

相关问题

  • Gitlab + Jenkins 多项目任务

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5