Hello,
I like to setup Subversion, so that all text files have svn:eol-style
and svn:keywords set, but binary files does not have any of them. Currently,
Subversion 1.4.2 (known to me since 1.2.0) does not include svn:eol-style
for binary files, but why it does include svn:keywords? I think that
svn:keywords is very similar to svn:eol-style in that it modifies
checkouted files, which is bad for binary files.
Current Subversion 1.4.2 behavior with added enable-auto-props = yes
and * = svn:eol-style=native;svn:keywords="Date Revision Author HeadURL Id"
in ~/.subversion/config:
$ svn add file.gif file.txt
svn: File 'file.gif' has binary mime type property
# This is bad, because file.gif has been added without any indication.
# It should either does not add file.gif as it did not add file.txt, or
# it should furthermore write "A file.gif".
$ svn proplist file.gif file.txt
Properties on 'file.gif':
svn:mime-type
svn:keywords
svn: 'file.txt' is not under version control
# There is svn:mime-type instead of svn:eol-style, but why is there
# svn:keywords?
I have created two small patches (at the end of this mail), which I think
solve mentioned problems:
$ svn add file.gif file.txt
A (bin) file.gif
A file.txt
# Both files are normally added, svn add is quiet for svn:keywords like
# in svn:eol-style case.
$ svn proplist file.gif file.txt
Properties on 'file.gif':
svn:mime-type
Properties on 'file.txt':
svn:keywords
svn:eol-style
# Ideal situation: Binary file has svn:mime-type, text file has
# svn:keywords and svn:eol-style.
Should I fill a bug report?
PS: I'm not in the users@ list, so please do cc: to me too, thanks.
--- subversion/libsvn_client/add.c.orig Tue Jan 23 09:35:03 2007
+++ subversion/libsvn_client/add.c Tue Jan 23 09:36:02 2007
@@ -213,6 +213,7 @@
const char *mimetype;
svn_node_kind_t kind;
svn_boolean_t is_special;
+ svn_error_t *err;
/* add the file */
SVN_ERR(svn_wc_add2(path, adm_access, NULL, SVN_INVALID_REVNUM,
@@ -246,11 +247,13 @@
void *pval;
apr_hash_this(hi, &pname, NULL, &pval);
- /* It's probably best to pass 0 for force, so that if
- the autoprops say to set some weird combination,
- we just error and let the user sort it out. */
- SVN_ERR(svn_wc_prop_set2(pname, pval, path,
- adm_access, FALSE, pool));
+ err = svn_wc_prop_set2 (pname, pval, path,
+ adm_access, FALSE, pool);
+ if (err && (err->apr_err == SVN_ERR_ILLEGAL_TARGET
+ || err->apr_err == SVN_ERR_BAD_MIME_TYPE))
+ svn_error_clear (err);
+ else if (err)
+ return err;
}
}
}
--- subversion/libsvn_wc/props.c.orig Tue Jan 23 09:36:13 2007
+++ subversion/libsvn_wc/props.c Tue Jan 23 09:37:03 2007
@@ -1474,6 +1474,27 @@
}
+static svn_error_t *
+validate_key_prop_against_file (const char *path,
+ svn_wc_adm_access_t *adm_access,
+ apr_pool_t *pool)
+{
+ svn_error_t *err;
+ const svn_string_t *mime_type;
+
+ /* See if this file has been determined to be binary. */
+ SVN_ERR (svn_wc_prop_get (&mime_type, SVN_PROP_MIME_TYPE, path, adm_access,
+ pool));
+ if (mime_type && svn_mime_type_is_binary (mime_type->data))
+ return svn_error_createf
+ (SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("File '%s' has binary mime type property"),
+ svn_path_local_style (path, pool));
+
+ return SVN_NO_ERROR;
+}
+
+
svn_error_t *
svn_wc_prop_set2(const char *name,
const svn_string_t *value,
@@ -1565,6 +1586,9 @@
{
new_value = svn_stringbuf_create_from_string(value, pool);
svn_stringbuf_strip_whitespace(new_value);
+ if (!skip_checks) {
+ SVN_ERR (validate_key_prop_against_file (path, adm_access, pool));
+ }
}
}
--
Rudolf Cejka <cejkar at fit.vutbr.cz> http://www.fit.vutbr.cz/~cejkar
Brno University of Technology, Faculty of Information Technology
Bozetechova 2, 612 66 Brno, Czech Republic
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org
Received on Tue Jan 23 17:42:01 2007