[Svnmerge] [PATCH] uninit merge tracking (version 3)

Raman Gupta rocketraman at fastmail.fm
Wed May 10 10:13:52 PDT 2006


Daniel Rall wrote:
> Comments inline, all the way through.  Nearly ready for commit.
> 
> On Wed, 10 May 2006, Raman Gupta wrote:
> ...
>> Attached v3 of the patch, and new log message:
>>
>> Add the uninit command, which removes merge tracking information for a given
>> head URL. This is useful if multiple heads are being tracked -- without 
>> uninit, this situation requires the new property value to be manually set by
>> the user via svn propset.
>>
>> * svnmerge.py: Added uninit to command table.
>>   (action_uninit): New method for uninitialization of merge tracking info.
>>
>> * svnmerge_test.py
>>   (TestCase_TestRepo.testUninit): New test case.
>>   (TestCase_TestRepo.testUninitForce): New test case.
> 
> Missing a change log for this guy:
> 
>     (TestCase_TestRepo.getproperty): ...

Oops, I'll add it depending on your response to my comments below.

> More on him below.
> 
>> Patch by: Raman Gupta <rocketraman at fastmail.fm>
>> Review by: Daniel Rall <dlr at collab.net>
>>            Giovanni Bajo <rasky at develer.com>
> 
> You can add Madan in here, too:
> 
>              Madan U Sreenivasan <madan at collab.net>

When I send the final patch I'll do that.

> Index: svnmerge.py
> ===================================================================
> --- svnmerge.py	(revision 19599)
> +++ svnmerge.py	(working copy)
> @@ -1191,7 +1191,30 @@
>          f.close()
>          report('wrote commit message to "%s"' % opts["commit-file"])
>  
> +def action_uninit(branch_dir, branch_props):
> +    """Uninit HEAD URL."""
> +    # Check branch directory is ready for being modified
> +    check_dir_clean(branch_dir)
>  
> +    # If the head-path already has an entry in the svnmerge-integrated
> +    # property, simply error out.
> +    if not branch_props.has_key(opts["head-path"]):
> +        error('"%s" does not contain merge tracking information for "%s"' \
> +                % (opts["head-path"], branch_dir))
> +
> +    del branch_props[opts["head-path"]]
> +
> +    # Set property
> +    set_merge_props(branch_dir, branch_props)
> +
> +    # Write out commit message if desired
> +    if opts["commit-file"]:
> +        f = open(opts["commit-file"], "w")
> +        print >>f, 'Removed merge tracking for "%s" for ' % NAME
> +        print >>f, '%s' % opts["head-url"]
> +        f.close()
> +        report('wrote commit message to "%s"' % opts["commit-file"])
> +
>  ###############################################################################
>  # Command line parsing -- options and commands management
>  ###############################################################################
> @@ -1640,6 +1663,14 @@
>      [
>          "-f", "-r", "-S", # import common opts
>      ]),
> +
> +    "uninit": (action_uninit,
> +    "uninit [OPTION...] [HEAD]",
> +    """Remove merge tracking information for HEAD on the current working
> +    directory.""",
> +    [
> +        "-f", "-S", # import common opts
> +    ]),
>  }
>  
>  
> Index: svnmerge_test.py
> ===================================================================
> --- svnmerge_test.py	(revision 19599)
> +++ svnmerge_test.py	(working copy)
> @@ -456,7 +456,10 @@
>  
>      def getproperty(self):
>          out = svnmerge.launch("svn pg %s ." % svnmerge.opts["prop"])
> -        return out[0].strip()
> +        if len(out) == 0:
> +            return None
> +        else:
> +            return out[0].strip()
>  
> 
> I can't say that I understand the reasoning behind this change.  Let's
> look at the usage below...

The reason is that if svn pg is called and the property does not exist,
then out[0] throws an array index exception. This has only come up now
because only my new test calls this when the property does not exist.

>      def testNoWc(self):
>          os.mkdir("foo")
> @@ -562,6 +565,56 @@
>          p = self.getproperty()
>          self.assertEqual("/trunk:1-6", p)
>  
> +    def testUninit(self):
> +        self.svnmerge2(["init", self.test_repo_url + "/branches/test-branch"])
> +
> +        self.launch("svn commit -F svnmerge-commit-message.txt",
> +                    match=r"Committed revision")
> +
> +        self.svnmerge2(["init", self.test_repo_url + "/branches/testYYY-branch"])
> +
> +        self.launch("svn commit -F svnmerge-commit-message.txt",
> +                    match=r"Committed revision")
> +
> +        p = self.getproperty()
> +        self.assertEqual("/branches/test-branch:1-13 /branches/testYYY-branch:1-14", p)
> +
> +        self.svnmerge2(["uninit", "--source", self.test_repo_url + "/branches/testYYY-branch"])
> +
> +        p = self.getproperty()
> +        self.assertEqual("/branches/test-branch:1-13", p)
> +
> +        self.launch("svn commit -F svnmerge-commit-message.txt",
> +                    match=r"Committed revision")
> +
> +        self.svnmerge2(["uninit", "--source", self.test_repo_url + "/branches/test-branch"])
> +
> +        p = self.getproperty()
> +        self.assertEqual(None, p)
> 
> So, it's allowing you to test for None instead of "" in this one
> place.  Can you describe the benefits of this?

See above.

> +
> +    def testUninitForce(self):
> +        self.svnmerge2(["init", self.test_repo_url + "/branches/test-branch"])
> +
> +        self.launch("svn commit -F svnmerge-commit-message.txt",
> +                    match=r"Committed revision")
> +
> +        self.svnmerge2(["init", self.test_repo_url + "/branches/testYYY-branch"])
> +
> +        self.launch("svn commit -F svnmerge-commit-message.txt",
> +                    match=r"Committed revision")
> +
> +        p = self.getproperty()
> +        self.assertEqual("/branches/test-branch:1-13 /branches/testYYY-branch:1-14", p)
> +
> +        open("test1", "a").write("foo")
> +
> +        self.svnmerge("uninit --source " + self.test_repo_url + "/branches/testYYY-branch",
> +                      error=True, match=r"clean")
> +
> +        self.svnmerge("uninit -F --source " + self.test_repo_url + "/branches/testYYY-branch")
> +        p = self.getproperty()
> +        self.assertEqual("/branches/test-branch:1-13", p)
> +
>      def testCheckInitializeEverything(self):
>          self.svnmerge2(["init", self.test_repo_url + "/trunk"])
>          p = self.getproperty()
> 

Cheers,
Raman



More information about the Svnmerge mailing list