You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by James Lamanna <ja...@appliedminds.com> on 2003/04/11 18:59:55 UTC

mailer.py + for_paths

So I noticed that mailer.py doesn't seem to have the behavior I
expected.
It didn't honor any regexs in for_paths because it wasn't making any
associations between
groups and paths matching the regex. So essentially it was running the
diff for every group on every file.

Here is a patch that fixes that behavior, and also lets you specify a
diff program for each group, 
using [groupname].diff

If I'm just totally missing something here, please tell me...

--James

Index: mailer.py
===================================================================
--- mailer.py   (revision 5606)
+++ mailer.py   (working copy)
@@ -60,8 +60,15 @@
     # turn the params into a hashable object and stash it away
     param_list = params.items()
     param_list.sort()
-    groups[group, tuple(param_list)] = params

+    # collect the set of paths belonging to this group
+    if groups.has_key( (group, tuple(param_list)) ):
+      old_param, paths = groups[group, tuple(param_list)]
+    else:
+      paths = [ ]
+    paths.append(path)
+    groups[group, tuple(param_list)] = (params, paths)

   output = determine_output(cfg, repos, changelist)
   output.generate(groups, pool)
@@ -142,12 +147,12 @@

     subpool = svn.util.svn_pool_create(pool)

-    for (group, param_tuple), params in groups.items():
+    for (group, param_tuple), (params, paths) in groups.items():
       self.start(group, params)

       # generate the content for this group and set of params
       generate_content(self, self.cfg, self.repos, self.changelist,
-                       group, params, subpool)
+                       group, params, paths, subpool)

       self.finish()
       svn.util.svn_pool_clear(subpool)
@@ -220,7 +225,7 @@
     # use the default group and no parameters
     ### is that right?
     generate_content(self, self.cfg, self.repos, self.changelist,
-                     None, { }, pool)
+                     None, { }, None, pool)

   def run_diff(self, cmd):
     # flush our output to keep the parent/child output in sync
@@ -312,8 +317,8 @@
     self.pipe.wait()


-def generate_content(output, cfg, repos, changelist, group, params,
pool):
-
+def generate_content(output, cfg, repos, changelist, group, params,
paths,
+                     pool):
   svndate = repos.get_rev_prop(svn.util.SVN_PROP_REVISION_DATE)
   ### pick a different date format?
   date = time.ctime(svn.util.secs_from_timestr(svndate, pool))
@@ -331,6 +336,11 @@

   # these are sorted by path already
   for path, change in changelist:
+    if paths is not None:
+      try:
+        paths.index(path)
+      except ValueError:
+        continue
     generate_diff(output, cfg, repos, date, change, group, params,
pool)


@@ -443,7 +453,8 @@

   src_fname, dst_fname = diff.get_files()

-  output.run_diff(cfg.get_diff_cmd({
+  output.run_diff(cfg.get_diff_cmd(group,
+    {
     'label_from' : label1,
     'label_to' : label2,
     'from' : src_fname,
@@ -664,9 +675,18 @@

     self._prep_groups(repos)

-  def get_diff_cmd(self, args):
+  def get_diff_cmd(self, group, args):
     cmd = [ ]
-    for part in self._diff_cmd:
+    diffcmd = ''
+    if group:
+      sub = getattr(self, group)
+      if hasattr(sub, 'diff'):
+        diffcmd = string.split(getattr(sub, 'diff'))
+      else:
+        diffcmd = self._diff_cmd
+    else:
+        diffcmd = self._diff_cmd
+    for part in diffcmd:
       cmd.append(part % args)
     return cmd

Index: mailer.conf.example
===================================================================
--- mailer.conf.example (revision 5606)
+++ mailer.conf.example (working copy)
@@ -164,6 +164,8 @@
 # to_addr = www-commits@example.com
 # # use the revision author as the from address
 # from_addr =
+# # add a custom diff program for this group
+# diff =
 #
 # [another-example]
 # # commits to personal repositories should go to that person



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: mailer.py + for_paths

Posted by Sander Roobol <ph...@wanadoo.nl>.
Filed as issue #1262.

Sander

On Fri, Apr 11, 2003 at 11:59:55AM -0700, James Lamanna wrote:
> So I noticed that mailer.py doesn't seem to have the behavior I
> expected.
> It didn't honor any regexs in for_paths because it wasn't making any
> associations between
> groups and paths matching the regex. So essentially it was running the
> diff for every group on every file.
> 
> Here is a patch that fixes that behavior, and also lets you specify a
> diff program for each group, 
> using [groupname].diff
> 
> If I'm just totally missing something here, please tell me...
> 
> --James
> 
> Index: mailer.py
> ===================================================================
> --- mailer.py   (revision 5606)
> +++ mailer.py   (working copy)
> @@ -60,8 +60,15 @@
>      # turn the params into a hashable object and stash it away
>      param_list = params.items()
>      param_list.sort()
> -    groups[group, tuple(param_list)] = params
> 
> +    # collect the set of paths belonging to this group
> +    if groups.has_key( (group, tuple(param_list)) ):
> +      old_param, paths = groups[group, tuple(param_list)]
> +    else:
> +      paths = [ ]
> +    paths.append(path)
> +    groups[group, tuple(param_list)] = (params, paths)
> 
>    output = determine_output(cfg, repos, changelist)
>    output.generate(groups, pool)
> @@ -142,12 +147,12 @@
> 
>      subpool = svn.util.svn_pool_create(pool)
> 
> -    for (group, param_tuple), params in groups.items():
> +    for (group, param_tuple), (params, paths) in groups.items():
>        self.start(group, params)
> 
>        # generate the content for this group and set of params
>        generate_content(self, self.cfg, self.repos, self.changelist,
> -                       group, params, subpool)
> +                       group, params, paths, subpool)
> 
>        self.finish()
>        svn.util.svn_pool_clear(subpool)
> @@ -220,7 +225,7 @@
>      # use the default group and no parameters
>      ### is that right?
>      generate_content(self, self.cfg, self.repos, self.changelist,
> -                     None, { }, pool)
> +                     None, { }, None, pool)
> 
>    def run_diff(self, cmd):
>      # flush our output to keep the parent/child output in sync
> @@ -312,8 +317,8 @@
>      self.pipe.wait()
> 
> 
> -def generate_content(output, cfg, repos, changelist, group, params,
> pool):
> -
> +def generate_content(output, cfg, repos, changelist, group, params,
> paths,
> +                     pool):
>    svndate = repos.get_rev_prop(svn.util.SVN_PROP_REVISION_DATE)
>    ### pick a different date format?
>    date = time.ctime(svn.util.secs_from_timestr(svndate, pool))
> @@ -331,6 +336,11 @@
> 
>    # these are sorted by path already
>    for path, change in changelist:
> +    if paths is not None:
> +      try:
> +        paths.index(path)
> +      except ValueError:
> +        continue
>      generate_diff(output, cfg, repos, date, change, group, params,
> pool)
> 
> 
> @@ -443,7 +453,8 @@
> 
>    src_fname, dst_fname = diff.get_files()
> 
> -  output.run_diff(cfg.get_diff_cmd({
> +  output.run_diff(cfg.get_diff_cmd(group,
> +    {
>      'label_from' : label1,
>      'label_to' : label2,
>      'from' : src_fname,
> @@ -664,9 +675,18 @@
> 
>      self._prep_groups(repos)
> 
> -  def get_diff_cmd(self, args):
> +  def get_diff_cmd(self, group, args):
>      cmd = [ ]
> -    for part in self._diff_cmd:
> +    diffcmd = ''
> +    if group:
> +      sub = getattr(self, group)
> +      if hasattr(sub, 'diff'):
> +        diffcmd = string.split(getattr(sub, 'diff'))
> +      else:
> +        diffcmd = self._diff_cmd
> +    else:
> +        diffcmd = self._diff_cmd
> +    for part in diffcmd:
>        cmd.append(part % args)
>      return cmd
> 
> Index: mailer.conf.example
> ===================================================================
> --- mailer.conf.example (revision 5606)
> +++ mailer.conf.example (working copy)
> @@ -164,6 +164,8 @@
>  # to_addr = www-commits@example.com
>  # # use the revision author as the from address
>  # from_addr =
> +# # add a custom diff program for this group
> +# diff =
>  #
>  # [another-example]
>  # # commits to personal repositories should go to that person
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
> For additional commands, e-mail: dev-help@subversion.tigris.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: mailer.py + for_paths

Posted by Greg Stein <gs...@lyra.org>.
On Fri, Apr 11, 2003 at 11:59:55AM -0700, James Lamanna wrote:
> So I noticed that mailer.py doesn't seem to have the behavior I
> expected.
> It didn't honor any regexs in for_paths because it wasn't making any
> associations between
> groups and paths matching the regex. So essentially it was running the
> diff for every group on every file.
> 
> Here is a patch that fixes that behavior, and also lets you specify a
> diff program for each group, 
> using [groupname].diff
> 
> If I'm just totally missing something here, please tell me...

No... I like it.

This patch was saved off into issuezilla bug #1262:
    http://subversion.tigris.org/issues/show_bug.cgi?id=1262

I've added further thoughts there.

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org