git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git-p4: add p4 shelf support

From
Luke Diamand <luke@diamand.org>
Date
Dec 6, 2016, 08:36 UTC
Message-ID
<CAE5ih79S+SFt-fsQ_2c4eXMankoXvoSE3zhxw39Y4XeQqQ9nMg@mail.gmail.com>
In-Reply-To
<01020158d1de0e71-ac079bb9-bc7d-4fb7-9ff7-60fd6955116b-000000@eu-west-1.amazonses.com>
On 6 December 2016 at 02:02, Nuno Subtil <subtil@gmail.com> wrote:
> Extends the submit command to support shelving a commit instead of
> submitting it to p4 (similar to --prepare-p4-only).
Is this just the same as these two changes?

http://www.spinics.net/lists/git/msg290755.html http://www.spinics.net/lists/git/msg291103.html

Thanks, Luke

Show 102 quoted lines
>
> Signed-off-by: Nuno Subtil <subtil@gmail.com>
> ---
>  git-p4.py | 36 ++++++++++++++++++++++++++++++------
>  1 file changed, 30 insertions(+), 6 deletions(-)
>
> diff --git a/git-p4.py b/git-p4.py
> index fd5ca52..3c4be22 100755
> --- a/git-p4.py
> +++ b/git-p4.py
> @@ -1286,6 +1286,8 @@ def __init__(self):
>                  optparse.make_option("--export-labels", dest="exportLabels", action="store_true"),
>                  optparse.make_option("--dry-run", "-n", dest="dry_run", action="store_true"),
>                  optparse.make_option("--prepare-p4-only", dest="prepare_p4_only", action="store_true"),
> +                optparse.make_option("--shelve-only", dest="shelve_only", action="store_true", help="Create P4 shelf for first change that would be submitted (using a new CL)"),
> +                optparse.make_option("--shelve-cl", dest="shelve_cl", help="Replace shelf under existing CL number (previously shelved files will be deleted)"),
>                  optparse.make_option("--conflict", dest="conflict_behavior",
>                                       choices=self.conflict_behavior_choices),
>                  optparse.make_option("--branch", dest="branch"),
> @@ -1297,6 +1299,8 @@ def __init__(self):
>          self.preserveUser = gitConfigBool("git-p4.preserveUser")
>          self.dry_run = False
>          self.prepare_p4_only = False
> +        self.shelve_only = False
> +        self.shelve_cl = None
>          self.conflict_behavior = None
>          self.isWindows = (platform.system() == "Windows")
>          self.exportLabels = False
> @@ -1496,6 +1500,12 @@ def prepareSubmitTemplate(self):
>                  else:
>                      inFilesSection = False
>              else:
> +                if self.shelve_only and self.shelve_cl:
> +                    if line.startswith("Change:"):
> +                        line = "Change: %s\n" % self.shelve_cl
> +                    if line.startswith("Status:"):
> +                        line = "Status: pending\n"
> +
>                  if line.startswith("Files:"):
>                      inFilesSection = True
>
> @@ -1785,7 +1795,11 @@ def applyCommit(self, id):
>                  if self.isWindows:
>                      message = message.replace("\r\n", "\n")
>                  submitTemplate = message[:message.index(separatorLine)]
> -                p4_write_pipe(['submit', '-i'], submitTemplate)
> +
> +                if self.shelve_only:
> +                    p4_write_pipe(['shelve', '-i', '-r'], submitTemplate)
> +                else:
> +                    p4_write_pipe(['submit', '-i'], submitTemplate)
>
>                  if self.preserveUser:
>                      if p4User:
> @@ -1799,12 +1813,17 @@ def applyCommit(self, id):
>                  # new file.  This leaves it writable, which confuses p4.
>                  for f in pureRenameCopy:
>                      p4_sync(f, "-f")
> -                submitted = True
> +
> +                if not self.shelve_only:
> +                    submitted = True
>
>          finally:
>              # skip this patch
>              if not submitted:
> -                print "Submission cancelled, undoing p4 changes."
> +                if not self.shelve_only:
> +                    print "Submission cancelled, undoing p4 changes."
> +                else:
> +                    print "Change shelved, undoing p4 changes."
>                  for f in editedFiles:
>                      p4_revert(f)
>                  for f in filesToAdd:
> @@ -2034,9 +2053,13 @@ def run(self, args):
>              if ok:
>                  applied.append(commit)
>              else:
> -                if self.prepare_p4_only and i < last:
> -                    print "Processing only the first commit due to option" \
> -                          " --prepare-p4-only"
> +                if (self.prepare_p4_only or self.shelve_only) and i < last:
> +                    if self.prepare_p4_only:
> +                        print "Processing only the first commit due to option" \
> +                              " --prepare-p4-only"
> +                    else:
> +                        print "Processing only the first commit due to option" \
> +                              " --shelve-only"
>                      break
>                  if i < last:
>                      quit = False
> @@ -3638,6 +3661,7 @@ def printUsage(commands):
>      "debug" : P4Debug,
>      "submit" : P4Submit,
>      "commit" : P4Submit,
> +    "shelve" : P4Submit,
>      "sync" : P4Sync,
>      "rebase" : P4Rebase,
>      "clone" : P4Clone,
>
> --
> https://github.com/git/git/pull/309
Previous: Nuno SubtilNext: Vinicius Kursancew
Message 2 of 4 in “git-p4: add p4 shelf support”
  1. git-p4: add p4 shelf supportNuno Subtil, Dec 6, 2016
  2. Luke DiamandDec 6, 2016
  3. Vinicius KursancewDec 6, 2016
  4. Luke DiamandDec 7, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.