Masaru Tsuchiyama <m.tma...@gmail.com> writes:

> Index: subversion/include/svn_props.h
> ===================================================================
> --- subversion/include/svn_props.h    (revision 1507762)
> +++ subversion/include/svn_props.h    (working copy)
> @@ -412,6 +412,14 @@
>   */
>  #define SVN_PROP_SPECIAL_VALUE SVN_PROP_BOOLEAN_TRUE
>  
> +/** The value to force the executable property to when set.
> + *
> + * @deprecated Provided for backward compatibility with the 1.4 API.
> + * Use @c SVN_PROP_BOOLEAN_TRUE instead.
> + * @since New in 1.9.
> + */
> +#define SVN_PROP_USE_COMMIT_TIMES_VALUE SVN_PROP_BOOLEAN_TRUE
> +

We don't want that, no existing code can be using it.

>  /** Describes external items to check out into this directory.
>   *
>   * The format is a series of lines, each in the following format:
> @@ -449,6 +457,12 @@
>  /** Property used to record inheritable configuration ignores. */
>  #define SVN_PROP_INHERITABLE_IGNORES SVN_PROP_PREFIX "global-ignores"
>  
> +/**
> + * Property used to control whether timestamp of a file is modified to the 
> commit time * @since New in 1.9.
> + * @since New in 1.9.
> + */
> +#define SVN_PROP_USE_COMMIT_TIMES  SVN_PROP_PREFIX "use-commit-times"
> +
>  /** Meta-data properties.
>   *
>   * The following properties are used for storing meta-data about
> @@ -509,7 +523,8 @@
>                                  SVN_PROP_TEXT_TIME, \
>                                  SVN_PROP_OWNER, \
>                                  SVN_PROP_GROUP, \
> -                                SVN_PROP_UNIX_MODE,
> +                                SVN_PROP_UNIX_MODE, \
> +                                SVN_PROP_USE_COMMIT_TIMES,
>  
>  /** @} */
>  
> Index: subversion/libsvn_subr/properties.c
> ===================================================================
> --- subversion/libsvn_subr/properties.c       (revision 1507762)
> +++ subversion/libsvn_subr/properties.c       (working copy)
> @@ -444,7 +444,8 @@
>       make any speed difference.  */
>    if (strcmp(prop_name, SVN_PROP_EXECUTABLE) == 0
>        || strcmp(prop_name, SVN_PROP_NEEDS_LOCK) == 0
> -      || strcmp(prop_name, SVN_PROP_SPECIAL) == 0)
> +      || strcmp(prop_name, SVN_PROP_SPECIAL) == 0
> +      || strcmp(prop_name, SVN_PROP_USE_COMMIT_TIMES) == 0)
>      return TRUE;
>    return FALSE;
>  }
> Index: subversion/libsvn_wc/props.c
> ===================================================================
> --- subversion/libsvn_wc/props.c      (revision 1507762)
> +++ subversion/libsvn_wc/props.c      (working copy)
> @@ -2153,7 +2153,7 @@
>      }
>    else if (svn_prop_is_boolean(propname))
>      {
> -      /* SVN_PROP_EXECUTABLE, SVN_PROP_NEEDS_LOCK, SVN_PROP_SPECIAL */
> +      /* SVN_PROP_EXECUTABLE, SVN_PROP_NEEDS_LOCK, SVN_PROP_SPECIAL, 
> SVN_PROP_USE_COMMIT_TIMES */
>        propval = &boolean_value;
>      }
>    else if (strcmp(propname, SVN_PROP_MERGEINFO) == 0)
> Index: subversion/libsvn_wc/update_editor.c
> ===================================================================
> --- subversion/libsvn_wc/update_editor.c      (revision 1507762)
> +++ subversion/libsvn_wc/update_editor.c      (working copy)
> @@ -23,6 +23,7 @@
>  
>  
>  
> +#include <assert.h>

Avoid assert if possible.

>  #include <stdlib.h>
>  #include <string.h>
>  
> @@ -751,6 +752,12 @@
>  
>    /* The tree conflict to install once the node is really edited */
>    svn_skel_t *edit_conflict;
> +
> +  /* use-commit-times */
> +  svn_boolean_t use_commit_times;
> +
> +  /* remove use-commit-times */
> +  svn_boolean_t remove_use_commit_times;
>  };
>  
>  
> @@ -3830,6 +3837,17 @@
>            fb->already_notified = TRUE;
>        }
>      }
> +  if ( strcmp(name, SVN_PROP_USE_COMMIT_TIMES) == 0)

The whitespace is wrong, use

     if (foo)

not

     if ( foo )

> +    {
> +        if( propchange->value )

and "if ("  not "if(".

> +          {
> +            fb->use_commit_times = TRUE;
> +          }
> +        else
> +          {
> +            fb->remove_use_commit_times = TRUE;
> +          }
> +    }
>  
>    return SVN_NO_ERROR;
>  }
> @@ -4636,6 +4654,24 @@
>        eb->notify_func(eb->notify_baton, notify, scratch_pool);
>      }
>  
> +  /* use_commit_times and remove_use_commit_times are mutably exclusive */
> +  assert( (fb->use_commit_times & fb->remove_use_commit_times) == 0 );

Use SVN_ERR_ASSERT instead.

> +  if ( !fb->adding_file )
> +    {
> +      if ( fb->use_commit_times && fb->changed_date )
> +        {
> +          SVN_ERR(svn_io_set_file_affected_time(fb->changed_date,
> +                                                fb->local_abspath,
> +                                                scratch_pool));
> +        }
> +      else if ( fb->remove_use_commit_times  )
> +        {
> +          SVN_ERR(svn_io_set_file_affected_time(apr_time_now(),
> +                                                fb->local_abspath,
> +                                                scratch_pool));
> +        }

The apr_time_now call looks odd.  Do we need to change the file's
timestamp in this case?

> +    }
> +
>    svn_pool_destroy(fb->pool); /* Destroy scratch_pool */
>  
>    /* We have one less referrer to the directory */

You also need to update the help text for 'svn ps' to describe the new
property, see subversion/svn/svn.c.

Perhaps this property should be inheritable?  Then it could be set on a
directory and apply to the whole tree?  I imagine users will want that
but it raises a new problem: how would a node override the inherited
property?  It can't delete a property that isn't set, and it can't set
it as that enables use-commit-times.  How would we make inheriting work?
Perhaps another property svn:no-commit-times?

-- 
Philip Martin | Subversion Committer
WANdisco | Non-Stop Data

Reply via email to