From ee17c3cf251aeeadbb3e3883523e68c927963818 Mon Sep 17 00:00:00 2001 From: Xavier Claessens <xavier.claessens@collabora.com> Date: Fri, 4 Sep 2015 12:13:58 -0400 Subject: [PATCH] tracker: improve media file copy method Summary: This fix failing tests when destination directory does not already exists Reviewers: smcv, pwith Differential Revision: https://phabricator.apertis.org/D384 --- tracker/automated/test-tracker.py | 17 ++-------------- tracker/common.py | 27 +++++++++++++++++++++++++ tracker/manual/test-removable-device.py | 10 ++------- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/tracker/automated/test-tracker.py b/tracker/automated/test-tracker.py index 68d2c18..20c3e7d 100755 --- a/tracker/automated/test-tracker.py +++ b/tracker/automated/test-tracker.py @@ -9,7 +9,6 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. import unittest -import subprocess import os import md5 import sys @@ -21,7 +20,6 @@ from gi.repository import Grl # import from parent directory sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir)) from common import TrackerIndexer -from common import MEDIADIR # define this here to make lint happy with too long lines long_jpeg_name = '320px-European_Common_Frog_Rana_temporaria.jpg' @@ -29,26 +27,15 @@ long_jpeg_name = '320px-European_Common_Frog_Rana_temporaria.jpg' class TrackerTest(unittest.TestCase): def setUp(self): - self.indexer = TrackerIndexer() self.loop = GLib.MainLoop.new(None, False) self.homedir = os.path.expanduser("~") - - # Copy media files appropriate directories - self.copytree('audio', 'Music') - self.copytree('documents', 'Documents') - self.copytree('images', 'Pictures') - self.copytree('playlists', 'Music') - self.copytree('videos', 'Videos') + self.indexer = TrackerIndexer() + self.indexer.copy_medias(self.homedir) def tearDown(self): # Keep everything in place for further manual checks pass - def copytree(self, src, dst): - abs_src = os.path.join(MEDIADIR, src, '*') - abs_dst = os.path.join(self.homedir, dst) - subprocess.check_call('cp -r ' + abs_src + ' ' + abs_dst, shell=True) - def tracker_config_tests(self): settings = Gio.Settings.new("org.freedesktop.Tracker.Miner.Files") self.assertEqual(settings.get_boolean('index-removable-devices'), True) diff --git a/tracker/common.py b/tracker/common.py index 723b304..4071a12 100644 --- a/tracker/common.py +++ b/tracker/common.py @@ -8,6 +8,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. import subprocess +import shutil import os from gi.repository import GLib @@ -29,6 +30,32 @@ class TrackerIndexer(): self.loop = GLib.MainLoop.new(None, False) + def copy_medias(self, dst): + """ + Copy media resources from apertis-tests to @dst with per media type + subdirectory corresponding to the default subdirectories in $HOME. + """ + self.copytree(MEDIADIR + '/audio', dst + '/Music') + self.copytree(MEDIADIR + '/documents', dst + '/Documents') + self.copytree(MEDIADIR + '/images', dst + '/Pictures') + self.copytree(MEDIADIR + '/playlists', dst + '/Music') + self.copytree(MEDIADIR + '/videos', dst + '/Videos') + + def copytree(self, root_src_dir, root_dst_dir): + # This is our own version of shutil.copytree. The difference is that + # if the destination directory already exists it adds files into it. If + # files already exists they are overwritten. + for src_dir, dirs, files in os.walk(root_src_dir): + dst_dir = src_dir.replace(root_src_dir, root_dst_dir) + if not os.path.exists(dst_dir): + os.mkdir(dst_dir) + for file_ in files: + src_file = os.path.join(src_dir, file_) + dst_file = os.path.join(dst_dir, file_) + if os.path.exists(dst_file): + os.remove(dst_file) + shutil.copy2(src_file, dst_dir) + def miner_progress_cb(self, manager, miner, status, progress, remaining_time): # Ignore signal if status didn't change diff --git a/tracker/manual/test-removable-device.py b/tracker/manual/test-removable-device.py index 08ae101..ce888d8 100755 --- a/tracker/manual/test-removable-device.py +++ b/tracker/manual/test-removable-device.py @@ -9,7 +9,6 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. import unittest -import subprocess import sys import os @@ -19,7 +18,6 @@ from gi.repository import Gio # import from parent directory sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir)) from common import TrackerIndexer -from common import MEDIADIR class TestRemovableDevice(unittest.TestCase): @@ -44,13 +42,9 @@ class TestRemovableDevice(unittest.TestCase): print('Please insert storage ...') self.loop.run() - # Copy some files to the removable device - print('Copying files to ' + self.path + '...') - abs_src = os.path.join(MEDIADIR, 'audio', '*') - subprocess.check_call('cp -r ' + abs_src + ' ' + self.path, shell=True) - - # Start indexer + # Copy our medias and start indexing self.indexer = TrackerIndexer() + self.indexer.copy_medias(self.path) self.indexer.start() self.assert_indexed('generic.flac', '?urn bosch:playable true') -- GitLab