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

Re: [PATCH 6/7] Add a "--clone" option to "stg branch"

From
CLChuck Lever <cel@citi.umich.edu>
Date
Dec 1, 2005, 21:47 UTC
Message-ID
<438F6F89.7010004@citi.umich.edu>
In-Reply-To
<b0943d9e0512011305v3299f27au@mail.gmail.com>
Catalin Marinas wrote:
Show 18 quoted lines
> On 29/11/05, Chuck Lever <cel@netapp.com> wrote:
> 
>>Cloning a branch means creating a new branch and copying all of the
>>original branch's patches and its base to it.  Like creating a tag,
>>but this also preserves all the StGIT patches as well.
> 
> [...]
> 
>>--- a/stgit/commands/branch.py
>>+++ b/stgit/commands/branch.py
> 
> [...]
> 
>>+        print 'Cloning current branch to "%s"...' % clone
> 
> 
> I would put a comma after this line and add sys.stdout.flush(). So
> that 'done' is shown on the same line.

d'oh! that's left over from when the Series.clone() method actually printed the name of each patch as it was cloning. fixed.

Show 16 quoted lines
> [...]
> 
>>--- a/stgit/stack.py
>>+++ b/stgit/stack.py
> 
> [...]
> 
>>+    def clone(self, target_series):
>>+        """Clones a series
>>+        """
> 
> 
> Wouldn't it be easier to do a recursive copy at the directory level
> (.git/patches/<branch> into .git/patches/<clone> and
> .git/refs/bases/<branch> into .git/refs/bases/<clone>)? Is there
> anything that could go wrong if we do this?

well, then you'd also clone any junk files that were left in there (for example, development notes).

also, by doing this a patch at a time, it gives the ability to hook in additional functionality in the future, in case we want to do something special to each newly cloned patch, like mechanically change the patch names, or automatically add some annotation, for example.

it also automatically converts an old-style branch (patches and series control files in same directory) to a new-style branch (patches in separate directory from series control files).

it follows the same basic pattern of logic as "stg pick". cloning a branch is kind of like 'picking' all of it's patches into a new branch.

but finally (and most practically speaking), i hunted around for Python code to copy a directory hierarchy, and interestingly enough it looks about as complicated (or maybe more complicated) than the clone implementation i finally came up with, which is only about 30 lines. i suppose we could just do a "os.system('cp -r yada yada')" but that's just lame ;^) and it only works on UNIX.

begin:vcard fn:Chuck Lever n:Lever;Charles org:Network Appliance, Incorporated;Open Source NFS Client Development adr:535 West William Street, Suite 3100;;Center for Information Technology Integration;Ann Arbor;MI;48103-4943;USA email;internet:cel@citi.umich.edu title:Member of Technical Staff tel;work:+1 734 763 4415 tel;fax:+1 734 763 4434 tel;home:+1 734 668 1089 x-mozilla-html:FALSE url:http://www.monkey.org/~cel/ version:2.1 end:vcard

Previous: Catalin MarinasNext: Chuck Lever
Message 10 of 16 in “[PATCH 0/7]”
  1. 0/7 Chuck Lever, Nov 29, 2005
  2. 1/7 Make "stg export" save the base commit in the output directoryChuck Lever, Nov 29, 2005
  3. Catalin MarinasNov 30, 2005
  4. 2/7 Use git-rev-parse to find the local GIT repositoryChuck Lever, Nov 29, 2005
  5. 3/7 Align branch descriptions in output of "stg branch -l"Chuck Lever, Nov 29, 2005
  6. 4/7 "stg series" option to show patch summary descriptionsChuck Lever, Nov 29, 2005
  7. 5/7 Add facility to print short list of patches around 'top'Chuck Lever, Nov 29, 2005
  8. 6/7 Add a "--clone" option to "stg branch"Chuck Lever, Nov 29, 2005
  9. Catalin MarinasDec 1, 2005
  10. Chuck LeverDec 1, 2005
  11. 7/7 Use a separate directory for patches under each branch subdirChuck Lever, Nov 29, 2005
  12. Catalin MarinasNov 30, 2005
  13. Chuck LeverNov 30, 2005
  14. Catalin MarinasNov 30, 2005
  15. Chuck LeverDec 1, 2005
  16. Catalin MarinasNov 30, 2005

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.