From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-3.7 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM,RP_MATCHES_RCVD shortcircuit=no autolearn=ham autolearn_force=no version=3.4.0 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by dcvr.yhbt.net (Postfix) with ESMTP id D9FE120986 for ; Sat, 22 Oct 2016 23:34:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965131AbcJVXd6 (ORCPT ); Sat, 22 Oct 2016 19:33:58 -0400 Received: from mail-it0-f51.google.com ([209.85.214.51]:36322 "EHLO mail-it0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965100AbcJVXdi (ORCPT ); Sat, 22 Oct 2016 19:33:38 -0400 Received: by mail-it0-f51.google.com with SMTP id e187so74387054itc.1 for ; Sat, 22 Oct 2016 16:33:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UPqm14z6Xzp0R5mU1OXmBx9UDv3H9P/ol1a2LVIXGk4=; b=SXNfkzOI66eKUrdD3SUD/xEJjRIH/XiFiVQNbR7SM2RWXCTqJJQNrwFcoAEq30wVpp wObI7rA7iCSsiVDfxJYYe6SA6zU/PKGbPqSECnJBPGNa3TEyCk6lTl16eE7oJxILeIJH T0Gs9f+zk04YLxIksRTF+VeEdkdRUS8+H0ojUAL6Q9pragcLP0ICrfVrrOEr8VLxjroO VkjwfDH5jc7j/KPJwEW8hp7s5aQUZY0O6BKr3pF1MyJZToj35acSiqTFJQgRobPsMmLL la0/ZVb9GLPC4T2AHb36CRtRNqCoTPX5RS/Cyzvl+oOjTvvY1j2/fxrqlMxVLy0YVnxL NGCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=UPqm14z6Xzp0R5mU1OXmBx9UDv3H9P/ol1a2LVIXGk4=; b=m4s1uqfwennYxGhwVgHElZty4zrG1b+rL3ynj7iJKpp54EkvqmZYukS2cXGqhi8FRW KL4EE6iOWl8fiJwEApRGAt/jJI38fxlqgUxtXw2xcwgAc07pQJWaWLjxUa4BfFb8BxpP dhH0FSQlFjyCzvUAmeWLOzHlynKGLOV7MWt85w0WQxbCYcPplegRraDUXBPvOHIa0qdr ZlDxR7AvR/dDhW57NTr2cCC6DpPSlNdjwxSpNU+jthSuZiIV59EMyG4K2IHdSUVGIQGn kHMwgsUryt8edDQMDejWGK/lccXYoDcYO9+IL+5X7DkgMvbseA6Z7BPU1F4TGwaxE/Xs cXyA== X-Gm-Message-State: ABUngver4dsmNM8O34agJpm1nlXREPeHZK9n7Kp+w8E2RdCEzQPgGY85J8N3RgaVGTNbMEnR X-Received: by 10.36.20.213 with SMTP id 204mr7128250itg.80.1477179217796; Sat, 22 Oct 2016 16:33:37 -0700 (PDT) Received: from localhost ([2620:0:1000:5b10:4ca0:b1d9:cc22:1c7b]) by smtp.gmail.com with ESMTPSA id c79sm1963165itc.16.2016.10.22.16.33.37 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Sat, 22 Oct 2016 16:33:37 -0700 (PDT) From: Stefan Beller To: gitster@pobox.com Cc: git@vger.kernel.org, bmwill@google.com, pclouds@gmail.com, Stefan Beller Subject: [PATCH 34/36] submodule update: add `--init-default-path` switch Date: Sat, 22 Oct 2016 16:32:23 -0700 Message-Id: <20161022233225.8883-35-sbeller@google.com> X-Mailer: git-send-email 2.10.1.508.g6572022 In-Reply-To: <20161022233225.8883-1-sbeller@google.com> References: <20161022233225.8883-1-sbeller@google.com> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The new switch `--init-default-path` initializes the submodules which are configured in `submodule.defaultUpdatePath` instead of those given as command line arguments before updating. In the first implementation this is made incompatible with further command line arguments as it is unclear what the user means by git submodule update --init --init-default-path This new switch allows to record more complex patterns as it saves retyping them whenever you invoke update. Signed-off-by: Stefan Beller Signed-off-by: Junio C Hamano --- Documentation/config.txt | 5 ++++ Documentation/git-submodule.txt | 17 +++++++++---- git-submodule.sh | 21 +++++++++++++--- t/t7400-submodule-basic.sh | 53 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 7 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index 27069ac..72901ef 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -2886,6 +2886,11 @@ submodule.alternateErrorStrategy as computed via `submodule.alternateLocation`. Possible values are `ignore`, `info`, `die`. Default is `die`. +submodule.defaultUpdatePath:: + Specifies a set of submodules to initialize when calling + `git submodule --init-default-group` by using the pathspec + syntax. + tag.forceSignAnnotated:: A boolean to specify whether annotated tags created should be GPG signed. If `--annotate` is specified on the command line, it takes diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt index bf3bb37..503fec8 100644 --- a/Documentation/git-submodule.txt +++ b/Documentation/git-submodule.txt @@ -14,10 +14,10 @@ SYNOPSIS 'git submodule' [--quiet] status [--cached] [--recursive] [--] [...] 'git submodule' [--quiet] init [--] [...] 'git submodule' [--quiet] deinit [-f|--force] (--all|[--] ...) -'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch] - [--[no-]recommend-shallow] [-f|--force] [--rebase|--merge] - [--reference ] [--depth ] [--recursive] - [--jobs ] [--] [...] +'git submodule' [--quiet] update [--init[-default-path]] [--remote] [-N|--no-fetch] + [--[no-]recommend-shallow] + [-f|--force] [--rebase|--merge] [--reference ] + [--depth ] [--recursive] [--jobs ] [--] [...] 'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) ] [commit] [--] [...] 'git submodule' [--quiet] foreach [--recursive] @@ -194,6 +194,10 @@ If the submodule is not yet initialized, and you just want to use the setting as stored in .gitmodules, you can automatically initialize the submodule with the `--init` option. +You can configure a set of submodules using pathspec syntax in +submodule.defaultUpdatePath you can use `--init-default-path` to initialize +those before updating. + If `--recursive` is specified, this command will recurse into the registered submodules, and update any nested submodules within. -- @@ -361,6 +365,11 @@ the submodule itself. Initialize all submodules for which "git submodule init" has not been called so far before updating. +--init-default-path:: + This option is only valid for the update command. + Initialize all submodules configured in "`submodule.defaultUpdatePath`" + that have not been updated before. + --name:: This option is only valid for the add command. It sets the submodule's name to the given string instead of defaulting to its path. The name diff --git a/git-submodule.sh b/git-submodule.sh index a024a13..334cecc 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -9,7 +9,7 @@ USAGE="[--quiet] add [-b ] [-f|--force] [--name ] [--reference ...] or: $dashless [--quiet] init [--] [...] or: $dashless [--quiet] deinit [-f|--force] (--all| [--] ...) - or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference ] [--recursive] [--] [...] + or: $dashless [--quiet] update [--init[-default-path]] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference ] [--recursive] [--] [...] or: $dashless [--quiet] summary [--cached|--files] [--summary-limit ] [commit] [--] [...] or: $dashless [--quiet] foreach [--recursive] or: $dashless [--quiet] sync [--recursive] [--] [...]" @@ -503,7 +503,12 @@ cmd_update() progress="--progress" ;; -i|--init) - init=1 + test -z $init || test $init = by_args || die "$(gettext "Only one of --init or --init-default-path may be used.")" + init=by_args + ;; + --init-default-path) + test -z $init || test $init = by_config || die "$(gettext "Only one of --init or --init-default-path may be used.")" + init=by_config ;; --remote) remote=1 @@ -572,7 +577,17 @@ cmd_update() if test -n "$init" then - cmd_init "--" "$@" || return + if test "$init" = "by_config" + then + if test $# -gt 0 + then + die "$(gettext "path arguments are incompatible with --init-default-path")" + fi + cmd_init "--" $(git config --get-all submodule.defaultUpdatePath) || return + else + cmd_init "--" "$@" || return + fi + fi { diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index b77cce8..4699b1c 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -1116,5 +1116,58 @@ test_expect_success 'submodule helper list is not confused by common prefixes' ' test_cmp expect actual ' +test_expect_success 'setup superproject with submodules' ' + mkdir sub1 && + ( + cd sub1 && + git init && + test_commit test && + test_commit test2 + ) && + mkdir multisuper && + ( + cd multisuper && + git init && + git submodule add ../sub1 sub0 && + git submodule add ../sub1 sub1 && + git submodule add ../sub1 sub2 && + git submodule add ../sub1 sub3 && + git commit -m "add some submodules" + ) +' + +cat >expect <<-EOF +-sub0 + sub1 (test2) + sub2 (test2) + sub3 (test2) +EOF + +test_expect_success 'submodule update --init with a specification' ' + test_when_finished "rm -rf multisuper_clone" && + pwd=$(pwd) && + git clone file://"$pwd"/multisuper multisuper_clone && + ( + cd multisuper_clone && + git submodule update --init . ":(exclude)sub0" && + git submodule status |cut -c 1,43- >../actual + ) && + test_cmp expect actual +' + +test_expect_success 'submodule update --init-default-path' ' + test_when_finished "rm -rf multisuper_clone" && + pwd=$(pwd) && + git clone file://"$pwd"/multisuper multisuper_clone && + ( + cd multisuper_clone && + git config submodule.defaultUpdatePath "." && + git config --add submodule.defaultUpdatePath ":(exclude)sub0" && + git submodule update --init-default-path && + git submodule status |cut -c 1,43- >../actual && + test_must_fail git submodule update --init-default-path sub0 + ) && + test_cmp expect actual +' test_done -- 2.10.1.508.g6572022