Thread (16 messages) flat view 16 messages, 3 authors, 2016-06-15

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

From: Chuck Lever <hidden>
Date: 2016-06-15 22:42:14

Catalin Marinas wrote:
On 29/11/05, Chuck Lever [off-list ref] wrote:
quoted
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.
[...]
quoted
--- a/stgit/commands/branch.py
+++ b/stgit/commands/branch.py
[...]
quoted
+        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.
[...]
quoted
--- a/stgit/stack.py
+++ b/stgit/stack.py
[...]
quoted
+    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.

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help