[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Bug report: The auto-props setting of svn:mime-type is impossible to avoid.

From: Edward d'Auvergne <true.bugman_at_gmail.com>
Date: Fri, 2 Oct 2015 10:06:26 +0200

Hi all,

I was wondering if this should be considered a bug. At the FlightGear
project we have a 6 GB data svn repository for aircraft (
https://sourceforge.net/projects/flightgear/ ,
https://sourceforge.net/p/flightgear/fgaddon/HEAD/tree/ ). A large
quantity of the files, almost 30,000 in number, are XML text files.

The problem is that modern Subversion clients appear to all be using
libmagic to determine the file type, to then set the svn:mime-type
property. However this is rather problematic:

$ file -ib Aircraft/747-400/747-400-set.xml
application/xml; charset=us-ascii

Libmagic detects all these XML files as "application/xml". Hence they
are treated as binary files! There are many other text files with
extensions such as *.ac, *.nas, etc. present in the repository that in
the future might be detected by libmagic as "application/xyz".

We have looked at disabling [auto-props] both as the user in
~/.subversion/config and as root in /etc/subversion/config by setting:

enable-auto-props = no

And by commenting out the entirety of the [auto-props] section.
However this does not prevent svn:mime-type from being set on all
files.

As this bad behaviour can be so incredibly damaging for this
repository, I have written pre-commit repository hook script to
specifically to block any file that enters the data repository that
has svn:mime-type set (
http://thread.gmane.org/gmane.games.flightgear.devel/77606/focus=77796
). I also block svn:executable in another script. Below I'll give a
worked example that anyone can use and replicate this problem with.
The problem is that Subversion clients setting svn:mime-type
automatically, even when told not to, and the hook script catching
this causes a lot of developer confusion and prevents the use of 'svn
import'.

I was wondering if there was anything that has been missed here? Is
this a real bug? The svn:mime-type property is not needed and is not
desired for any file in this repository. Any help would be
appreciated.

Cheers,

Edward

P. S. Here is the detailed worked example:

Set up:

$ export BASE_DIR="~/flightgear/repo_testing/"
$ export BACKUP_DIR="~/flightgear/backup/"

Initialise a new svn repository:

$ cd $BASE_DIR
$ svnadmin create test1.svn
$ svn co file://$BASE_DIR/test1.svn/ test1
Checked out revision 0.

Copy scripts from FGAddon backup:

$ rsync -av svn.code.sf.net::p/flightgear/fgaddon/hooks $BACKUP_DIR
$ cd $BACKUP_DIR
$ cd hooks/
$ cp -vp pre-commit fgaddon-svn-* $BASE_DIR/test1/hooks/

Download the DaSH aircraft from
https://drive.google.com/file/d/0B-4Q5DonNb8yTi1Cd1J5Um1xMTg/view to
$BASE_DIR.

Testing 'svn import':

$ cd $BASE_DIR
$ tar xvf dash_v1.tar
dash/
dash/avlModel/
dash/dash-fdm.xml
dash/dash-set.xml
dash/Engines/
[snip]
$ svn import dash file://$BASE_DIR/test1.svn/DaSH_svn_import/ -m
"Initial import of the DaSH human powered aircraft.\n\nFor details see
the forum thread at
http://forum.flightgear.org/viewtopic.php?f=4&t=24495 ."
Adding (bin) dash/._thumbnail.jpg
Adding dash/Engines
Adding dash/Engines/dash-engine.xml
Adding dash/Engines/dash-prop.xml
Adding dash/Images
Adding (bin) dash/Images/._DashBoot_logo_Mod.png
Adding (bin) dash/Images/._dash-3view.png
Adding (bin) dash/Images/DashBoot_logo_Mod.png
Adding (bin) dash/Images/dash-3view.png
Adding dash/Models
Adding (bin) dash/Models/._SLE_21b.ac
Adding (bin) dash/Models/._dash-model.xml
Adding dash/Models/SLE_21b.ac
Adding dash/Models/dash-model.xml
Adding dash/avlModel
Adding (bin) dash/avlModel/._dae11.dat
Adding (bin) dash/avlModel/._dash.avl
Adding (bin) dash/avlModel/._plot.pdf
Adding (bin) dash/avlModel/._plot.ps
Adding dash/avlModel/dae11.dat
Adding dash/avlModel/dash.avl
Adding dash/avlModel/dash_stability.txt
Adding (bin) dash/avlModel/plot.pdf
Adding dash/avlModel/plot.ps
Adding dash/dash-fdm.xml
Adding dash/dash-set.xml
Adding (bin) dash/thumbnail.jpg
svn: E165001: Commit blocked by pre-commit hook (exit code 1) with output:

The svn:mime-type property is set on the files
['DaSH_svn_import/._thumbnail.jpg',
'DaSH_svn_import/Images/._DashBoot_logo_Mod.png', 'DaSH_svn_import/Images
/._dash-3view.png', 'DaSH_svn_import/Images/DashBoot_logo_Mod.png',
'DaSH_svn_import/Images/dash-3view.png', 'DaSH_svn_import/Models/._SLE_21b.ac',
'DaSH_svn_import/Models/._dash-model.xml',
'DaSH_svn_import/avlModel/._dae11.dat', 'DaSH_svn_import/avlModel/._dash.avl',
'DaSH_svn_import/avlModel/._plot.pdf', 'DaSH_svn_import/avlModel/._plot.ps',
'DaSH_svn_import/avlModel/plot.pdf', 'DaSH_svn_import/thumbnail.jpg'], aborting
the commit.

The current policy is that the svn:mime-type property is to be avoided in
FGAddon. Before committing, please remove this property by typing 'svn propdel
svn:mime-type file_name' for all affected files. Or to remove it recursively
from all files to be committed, in your aircraft directory type 'svn propdel
svn:mime-type -R'.

To avoid the svn:mime-type property being set by your subversion client, the
subversion configuration should be edited and all [auto-props] entries commented
out. In addition the setting "enable-auto-props = yes" should be deleted from
all subversion config files (in certain svn clients, this will use libmagic to
determine the mime-type and set this for all new files). This includes the user
configuration file at $HOME/.subversion/config or, if this is not present, the
global configuration file at /etc/subversion/config in GNU/Linux and Mac OS X or
%appdata%\subversion\config and %appdata%\roaming\subversion\config in MS
Windows.

Check what was imported:

$ cd $BASE_DIR/test1
$ svn up
$ svn log -v

Nothing went into the repository. Try another way:

$ cd $BASE_DIR/test1
$ svn mkdir DaSH_svn_import
$ svn ci -m "Created a directory for testing a new aircraft addition
using 'svn add'."
$ cd DaSH_svn_import
$ cp -urvp
$ cp -urvp $BASE_DIR/dash/* .
‘/flightgear/repo_testing/mimetype//dash/avlModel’ -> ‘./avlModel’
‘/flightgear/repo_testing/mimetype//dash/avlModel/._dae11.dat’ ->
‘./avlModel/._dae11.dat’
‘/flightgear/repo_testing/mimetype//dash/avlModel/dae11.dat’ ->
‘./avlModel/dae11.dat’
‘/flightgear/repo_testing/mimetype//dash/avlModel/._dash.avl’ ->
‘./avlModel/._dash.avl’
‘/flightgear/repo_testing/mimetype//dash/avlModel/dash.avl’ ->
‘./avlModel/dash.avl’
‘/flightgear/repo_testing/mimetype//dash/avlModel/dash_stability.txt’
-> ‘./avlModel/dash_stability.txt’
[snip]
$ rm -f */._*
$ svn add *
$ svn pl -R
Properties on 'Images/DashBoot_logo_Mod.png':
  svn:mime-type
Properties on 'Images/dash-3view.png':
  svn:mime-type
Properties on 'avlModel/plot.pdf':
  svn:mime-type
Properties on 'thumbnail.jpg':
  svn:mime-type

These properties then have to be removed prior to committing with:

$ svn pdel -R svn:mime-type
$ svn ci -m "Import of the DaSH aircraft using 'svn add'."
Received on 2015-10-02 10:10:27 CEST

This is an archived mail posted to the Subversion Users mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.