History log of /haiku/src/apps/installer/CopyEngine.h
Revision Date Author Comments
# dfb36b35 08-Aug-2020 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Installer: fix 'clean install' over existing installation.

Whenever the target of an installation is a partition that is not empty, the
Installer prompts the user whether they would like to continue with a 'clean
installation', i.e. an installation that clears out the system folder,
excluding the settings, and cleanly installs the assets in the source's
system folder. At all other locations the source data is merged, meaning that
the source version is copied in place.

The logic that clears out the existing /system/ directory stopped working. This
change moves that logic from the copying process, to where it is run before any
file is copied. The added advantage is that the system folder is now properly
cleaned up, also stray files under the system folder will be removed.

This change does not change the logic of what constitutes a 'clean install'.
There are arguments to be made that it should potentially also drop the
settings files, as well as clean out the user's home folder for stray
add-ons, but that really is different functionality, and at this points I
think the requirements for that are not yet fleshed out.

The change was manually tested.

Fixes #16092

Change-Id: Ia6781c8d2330ba336b3921f9a980b5e31c48a2ec
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3140
Reviewed-by: Andrew Lindesay <apl@lindesay.co.nz>


# 3f7f9896 08-Aug-2020 Niels Sascha Reedijk <niels.reedijk@gmail.com>

Installer: Remove `level` parameter from CopyEngine

The level parameter in the CopyEngine::CollectCopyInfo() and
CopyEngine::Copy() methods was introduced in hrev30395 to allow the CopyEngine
to decide which directories should be copied. Since then, this
class has been rewritten and it is no longer necessary for that purpose.

This change refactors the CopyEngine and removes the
level parameter from the class interface. Furthermore, it was broken to begin
with; it was passed as reference to the internal recursive _Copy() and
_CollectCopyInfo() methods, meaning they acted like a global counter. The
global counter was increased at the beginning and decreased at the end of those
methods. Execution could terminate early though, leaving the level counter out
of sync with the recursion level.

There is one use of the level parameter, namely in the
WorkerThread::EntryFilter::ShouldClobberFolder() method, but the use of the
parameter was wrong (it would have been at level 3 at the point of the check,
not level 2) and the logic is functional without the level check.
Change-Id: Id92ef89b015e9b1185bde061273f61e492664bce
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3139
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
Reviewed-by: Axel Dörfler <axeld@pinc-software.de>


# d7e2195b 29-Mar-2020 Leorize <leorize+oss@disroot.org>

installer/CopyEngine: don't return values via class states

_CollectCopyInfo uses fBytesToCopy and fItemsToCopy for the sole purpose
of returning the scan results. This variable in turn was used to add to
the amount of files to copy in the progress bar, causing it to grow
exponentially with every CollectTargets calls.

With the current use case, the variable would have to be reset to 0
everytime CollectTargets is invoked, making it rather useless as a class
state.

This commit turns those variables into _CollectCopyInfo return values,
and also fix the exponential growth of the progress bar target.

Fixes #15826

Change-Id: Ib734febfdd8aaaa12fdfac61be124adb61b28f6c
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2445
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# bf551d38 21-Mar-2020 Leorize <leorize+oss@disroot.org>

installer/CopyEngine: now only exposes a Copy() method

Previously this class exposes two methods:
- CopyFile(): only copy the file data, nothing else.
- CopyFolder(): copy files & directories between two folders, while
preserving the attributes as well as symlinks.

With this commit, everything is unified into one method: Copy(). This
method can handle files, directories, symlinks and optionally also copy
attributes. Since most of the logic was just moved around, we can be
rather certain that this won't disrupt CopyEngine behaviors by much.

In the future we should look into using BCopyEngine to replace the
copying part of CopyEngine, as they seems to be compatible.

This change allows the Installer to make use of CopyEngine as a
general-purpose copier, in preparation for optional .hpkg installation
support.

Change-Id: Iad5ba2ebc9f34b7822e550b415308fd2b43eed47
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2399
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# ba6f7c8c 02-Jun-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Installer: CopyEngine: Pass relative path to EntryFilter

... instead of the file name.


# c2be967e 02-Jun-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Installer: CopyEngine: Externalize decision making

* Add interface EntryFilter, an instance of which can be passed to the
CopyEngine. The object is asked whether to copy entries/clobber
directories.
* Move the _ShouldCopyEntry()/_ShouldClobberFolder() code to new
WorkerThread::EntryFilter.


# e6c49e10 19-Mar-2011 Stephan Aßmus <superstippi@gmx.de>

Don't ignore the entire var directory, but rather only
the swap file specifically. There is already a TODO in
the code for replacing this mechanism with something
cleaner and more flexible. Resolves ticket #7367.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41026 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7f78035b 25-Apr-2010 Jérôme Duval <korli@users.berlios.de>

Should fix #5806. CollectTargets() is also called for packages, the fVarDirectory init is moved to ResetTargets().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36475 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 51f50b12 19-Jan-2010 Stephan Aßmus <superstippi@gmx.de>

Installer cannot use find_directory(), since it needs to support source volumes
other than /boot. That's why it worked like it did in the first place. Some
folders like "trash" can be volume specific, but most others are not and the
volume passed to find_directory() is ignored (which makes sense).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35175 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6ff00ae7 19-Jan-2010 Stephan Aßmus <superstippi@gmx.de>

Make the Installer ignore /var at it's new location. The old location is also
still checked, in case one uses the Installer to copy an old installation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35173 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 224c9ca6 18-Sep-2009 Stephan Aßmus <superstippi@gmx.de>

Fixed a warning.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33168 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 72586154 06-Sep-2009 Stephan Aßmus <superstippi@gmx.de>

* Finished ProgressReporter
* Integrated ProgressReporter into CopyEngine and UnzipEngine.
* Integrated unzipping to main installer engine. Since there are currently no
.zip files in the _packages_ folder (and not even a _packages_ folder
itself), this is completely invisible, but it works.

TODO: Adjust the build system to optionally copy packages into _packages_
instead of extracting them. Like for the CD build profile mode.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32967 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8e3916f8 02-Sep-2009 Stephan Aßmus <superstippi@gmx.de>

Extracted SemaphoreLocker into it's own file.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32904 a95241bf-73f2-0310-859d-f6bbb57e9c96


# da268834 31-Aug-2009 Stephan Aßmus <superstippi@gmx.de>

Update the progress bar more often during file copies (every 2 MB instead of
every 10, which was not smooth enough).

+alphabranch


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32847 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d7737cc8 29-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

Changed the somewhat bold BLocker usage to a more straight forward semaphore
based mechanism to pause and eventually cancel the WorkerThread. This also works
now when the CopyEngine is still collecting file informartion (ticket #4153).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31912 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f76e944e 14-Jun-2009 Stephan Aßmus <superstippi@gmx.de>

* Fixed problems when installing onto non-empty target volumes. The
'system' folder will be a clean copy of the source volume. Other
folders will be merged (as before), but in case a folder is in the
way of a link or file from the source volume, it will now be purged.
* Clarified the alert for non-empty target volumes, so it is very clear
what happens. (Maybe there ought to the be option to only copy the system
folder, though.)
* Fixed a problem with copying attributes in certain cases.
* Fixed the main GUI not resetting state properly after encountering an
error during the copy process.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31042 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 92cd10f4 03-May-2009 Stephan Aßmus <superstippi@gmx.de>

* Refactored the way targets are collected before copy process begins, this
way, the optional packages (if there would be any) can be collected as well
before the actual process starts and the progress bar will reflect them
correctly. Before this change, the progress bar would have reset itself for
every optional package.
* In one of my previous commits, I added the error, if there was any, to the
reset message. Now the Installer window looks for the error and tells the
user about it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30602 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f827b016 03-May-2009 Stephan Aßmus <superstippi@gmx.de>

Cleanup round 2:
Renamed CopyEngine2 back to CopyEngine.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30601 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b4afa663 03-May-2009 Stephan Aßmus <superstippi@gmx.de>

First round of cleanup:
* Renamed CopyEngine to WorkerThread, since it's used for other things than
just copying.
* Removed the code borrowed from Tracker.
* Removed the InstallerCopyLoopControl, since the CopyEngine handles
notifications and cancelling by itself now.
* Renamed a few message constants.
* Since we only support BFS partitions as install targets, I removed the
FS type from the target menu item label. However, I am going to solve this
differently. I guess all partitions should be seen in the target list, just
disabled if they are not a valid target, and with a reason given too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30600 a95241bf-73f2-0310-859d-f6bbb57e9c96


# fd8ddbc2 26-Apr-2009 Stephan Aßmus <superstippi@gmx.de>

* Fixed GCC 4 build and warnings.
* Used std::vector in BlockingQueue instead of Ingo's Vector until I can figure out the GCC4 problems.
This is untested, but I will test this on another machine in a minute.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30423 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7b293a3e 25-Apr-2009 Stephan Aßmus <superstippi@gmx.de>

* Prevent to copy the "var" and "_packages_" folders from the source volume
root folder as before switching the CopyEngine.
* Add a button "Write Boot Sector" that makes the selected target volume
bootable without performing an installation. Adjusted the status message
after installation to be more descriptive.
* Small improvements in the CopyEngine, collecting the source size should be
even a bit faster now since we can use the file size from the already
performed stat().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30395 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 803d0234 25-Apr-2009 Stephan Aßmus <superstippi@gmx.de>

Sorry, this is a bit of a mess yet and needs more refactoring...
* I've implemented my own copy engine which runs a separate writer thread.
Especially when installing from one hard drive to another, it should speed
things up. When installing from CD, the entire harddisk write time should
at least disappear in the CD read time. When installing from/to the same
drive, the new routine is as fast as the Tracker code that was used before.
* When stopping/canceling the copy process, the copy engine will now actually
block, instead of happily going on while the alert is showing. I've
still implemented that to not leave incomplete files around, like before.
* There is now a progress bar, based on data bytes in files to copy. Reason
being that it's quite fast to collect this info versus also scanning all
attributes.
* The copy engine itself was used in another project before and was tested
with SHA256 hashes of the original files and the copied files, so I think
it can be trusted.
* There is now a lot of code that can be removed or should be cleaned up.
What was the "CopyEngine" should become the "WorkerThread" or something.
* I still had a mental TODO about skipping the swap file (there is none on
CDs, but when copying a harddisk installation there may be one), I just
remembered this when typing this commit message... will fix that next.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30394 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5d6a2a65 18-Aug-2008 Jérôme Duval <korli@users.berlios.de>

* improved error and cancellation handling
* only enable Begin button when a menu item has been chosen


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27051 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 87905063 02-Jun-2008 Jérôme Duval <korli@users.berlios.de>

better handles error and cancellation when copying


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25772 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 739dbdfa 12-May-2008 Jérôme Duval <korli@users.berlios.de>

* Patch from Christian Fasshauer: provides a cancel button
* fixed a few things: one couldn't restart the install process when cancelled, use B_QUIT_REQUESTED instead of QuitRequested().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25466 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9f3d8cb6 12-May-2007 Jérôme Duval <korli@users.berlios.de>

code style update
now mount the target partition before copying


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21113 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a5fa64b5 01-Feb-2006 Jérôme Duval <korli@users.berlios.de>

some changes : alert if free space isn't enough, set status when mouse is over packages (doesn't work for some reason ...)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16192 a95241bf-73f2-0310-859d-f6bbb57e9c96


# cbdfe279 23-Jan-2006 Jérôme Duval <korli@users.berlios.de>

reworked a bit to install packages


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16048 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 46065378 20-Jan-2006 Jérôme Duval <korli@users.berlios.de>

actually uses the copyengine looper to handle the copy process


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16011 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ebc8a403 04-Jan-2006 Jérôme Duval <korli@users.berlios.de>

Installer makes use of FSCopyFolder in libtracker.so


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15839 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1eedf230 26-Oct-2005 Jérôme Duval <korli@users.berlios.de>

now populates menus
improved size to string formating for GB and TB


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14531 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1a8f53bb 19-Oct-2005 Jérôme Duval <korli@users.berlios.de>

added a SourceVisitor and a TargetVisitor to go through BDiskDevice and BPartition objects


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14424 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b461fb1d 18-Oct-2005 Jérôme Duval <korli@users.berlios.de>

added a haiku logo from stippi, thanks!
enlarged the window
improves widget placement


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14419 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 633dee06 30-Sep-2005 Jérôme Duval <korli@users.berlios.de>

fix packages view, added a copy engine class


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14283 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ba6f7c8c42038755c9017ae014859d016b072580 02-Jun-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Installer: CopyEngine: Pass relative path to EntryFilter

... instead of the file name.


# c2be967eb9044dd6a57f8ce0f0fde28c3e2e8ab9 02-Jun-2013 Ingo Weinhold <ingo_weinhold@gmx.de>

Installer: CopyEngine: Externalize decision making

* Add interface EntryFilter, an instance of which can be passed to the
CopyEngine. The object is asked whether to copy entries/clobber
directories.
* Move the _ShouldCopyEntry()/_ShouldClobberFolder() code to new
WorkerThread::EntryFilter.


# e6c49e10f99c49c67971071d288c992ad3948d9d 19-Mar-2011 Stephan Aßmus <superstippi@gmx.de>

Don't ignore the entire var directory, but rather only
the swap file specifically. There is already a TODO in
the code for replacing this mechanism with something
cleaner and more flexible. Resolves ticket #7367.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41026 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7f78035b8b9c9c43bfa0aa34b48c5ff4bd23bc3b 25-Apr-2010 Jérôme Duval <korli@users.berlios.de>

Should fix #5806. CollectTargets() is also called for packages, the fVarDirectory init is moved to ResetTargets().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36475 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 51f50b12745c64a195c33857985f65de23a40249 19-Jan-2010 Stephan Aßmus <superstippi@gmx.de>

Installer cannot use find_directory(), since it needs to support source volumes
other than /boot. That's why it worked like it did in the first place. Some
folders like "trash" can be volume specific, but most others are not and the
volume passed to find_directory() is ignored (which makes sense).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35175 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6ff00ae7e516314cdbde75d708c17ed786e24445 19-Jan-2010 Stephan Aßmus <superstippi@gmx.de>

Make the Installer ignore /var at it's new location. The old location is also
still checked, in case one uses the Installer to copy an old installation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35173 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 224c9ca6d740da9d1857e17936dcf6fcce916ee2 18-Sep-2009 Stephan Aßmus <superstippi@gmx.de>

Fixed a warning.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33168 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 72586154d7f505bd5f15377db729b515d40dee40 06-Sep-2009 Stephan Aßmus <superstippi@gmx.de>

* Finished ProgressReporter
* Integrated ProgressReporter into CopyEngine and UnzipEngine.
* Integrated unzipping to main installer engine. Since there are currently no
.zip files in the _packages_ folder (and not even a _packages_ folder
itself), this is completely invisible, but it works.

TODO: Adjust the build system to optionally copy packages into _packages_
instead of extracting them. Like for the CD build profile mode.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32967 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8e3916f8ef7f29c7fc15250c8d3f5ac510988116 02-Sep-2009 Stephan Aßmus <superstippi@gmx.de>

Extracted SemaphoreLocker into it's own file.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32904 a95241bf-73f2-0310-859d-f6bbb57e9c96


# da268834aba1485f7a60b22985b1509adb495efc 31-Aug-2009 Stephan Aßmus <superstippi@gmx.de>

Update the progress bar more often during file copies (every 2 MB instead of
every 10, which was not smooth enough).

+alphabranch


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32847 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d7737cc84f8e442fac5d246b1d4ec063312ea259 29-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

Changed the somewhat bold BLocker usage to a more straight forward semaphore
based mechanism to pause and eventually cancel the WorkerThread. This also works
now when the CopyEngine is still collecting file informartion (ticket #4153).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31912 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f76e944e24b1686fc3c45c30a47de543c025f11c 14-Jun-2009 Stephan Aßmus <superstippi@gmx.de>

* Fixed problems when installing onto non-empty target volumes. The
'system' folder will be a clean copy of the source volume. Other
folders will be merged (as before), but in case a folder is in the
way of a link or file from the source volume, it will now be purged.
* Clarified the alert for non-empty target volumes, so it is very clear
what happens. (Maybe there ought to the be option to only copy the system
folder, though.)
* Fixed a problem with copying attributes in certain cases.
* Fixed the main GUI not resetting state properly after encountering an
error during the copy process.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31042 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 92cd10f4db338d2aa15f215025a61f8808d4f7ba 03-May-2009 Stephan Aßmus <superstippi@gmx.de>

* Refactored the way targets are collected before copy process begins, this
way, the optional packages (if there would be any) can be collected as well
before the actual process starts and the progress bar will reflect them
correctly. Before this change, the progress bar would have reset itself for
every optional package.
* In one of my previous commits, I added the error, if there was any, to the
reset message. Now the Installer window looks for the error and tells the
user about it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30602 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f827b0168a3712e37c0d31d783a26baa92c05411 03-May-2009 Stephan Aßmus <superstippi@gmx.de>

Cleanup round 2:
Renamed CopyEngine2 back to CopyEngine.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30601 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b4afa66367d65eb54c52b4aeec4724af691ef11b 03-May-2009 Stephan Aßmus <superstippi@gmx.de>

First round of cleanup:
* Renamed CopyEngine to WorkerThread, since it's used for other things than
just copying.
* Removed the code borrowed from Tracker.
* Removed the InstallerCopyLoopControl, since the CopyEngine handles
notifications and cancelling by itself now.
* Renamed a few message constants.
* Since we only support BFS partitions as install targets, I removed the
FS type from the target menu item label. However, I am going to solve this
differently. I guess all partitions should be seen in the target list, just
disabled if they are not a valid target, and with a reason given too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30600 a95241bf-73f2-0310-859d-f6bbb57e9c96


# fd8ddbc230e9cede6a071920da1338282fc8cd91 26-Apr-2009 Stephan Aßmus <superstippi@gmx.de>

* Fixed GCC 4 build and warnings.
* Used std::vector in BlockingQueue instead of Ingo's Vector until I can figure out the GCC4 problems.
This is untested, but I will test this on another machine in a minute.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30423 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7b293a3e9352708b1d067a4f4cd4c7a19ab7e64f 25-Apr-2009 Stephan Aßmus <superstippi@gmx.de>

* Prevent to copy the "var" and "_packages_" folders from the source volume
root folder as before switching the CopyEngine.
* Add a button "Write Boot Sector" that makes the selected target volume
bootable without performing an installation. Adjusted the status message
after installation to be more descriptive.
* Small improvements in the CopyEngine, collecting the source size should be
even a bit faster now since we can use the file size from the already
performed stat().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30395 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 803d0234c19a3499f0191cc018c0b523c7f1520d 25-Apr-2009 Stephan Aßmus <superstippi@gmx.de>

Sorry, this is a bit of a mess yet and needs more refactoring...
* I've implemented my own copy engine which runs a separate writer thread.
Especially when installing from one hard drive to another, it should speed
things up. When installing from CD, the entire harddisk write time should
at least disappear in the CD read time. When installing from/to the same
drive, the new routine is as fast as the Tracker code that was used before.
* When stopping/canceling the copy process, the copy engine will now actually
block, instead of happily going on while the alert is showing. I've
still implemented that to not leave incomplete files around, like before.
* There is now a progress bar, based on data bytes in files to copy. Reason
being that it's quite fast to collect this info versus also scanning all
attributes.
* The copy engine itself was used in another project before and was tested
with SHA256 hashes of the original files and the copied files, so I think
it can be trusted.
* There is now a lot of code that can be removed or should be cleaned up.
What was the "CopyEngine" should become the "WorkerThread" or something.
* I still had a mental TODO about skipping the swap file (there is none on
CDs, but when copying a harddisk installation there may be one), I just
remembered this when typing this commit message... will fix that next.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30394 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5d6a2a65da2c05fbccfafde34dc81fee46905265 18-Aug-2008 Jérôme Duval <korli@users.berlios.de>

* improved error and cancellation handling
* only enable Begin button when a menu item has been chosen


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27051 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 87905063c3507da17f019b07f4b370cfe1fb319f 02-Jun-2008 Jérôme Duval <korli@users.berlios.de>

better handles error and cancellation when copying


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25772 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 739dbdfae4dca5237d84062a640c569d2ed28ca4 12-May-2008 Jérôme Duval <korli@users.berlios.de>

* Patch from Christian Fasshauer: provides a cancel button
* fixed a few things: one couldn't restart the install process when cancelled, use B_QUIT_REQUESTED instead of QuitRequested().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25466 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9f3d8cb64fdbfd9b5ceff4e63669fdbb8dac0fc0 12-May-2007 Jérôme Duval <korli@users.berlios.de>

code style update
now mount the target partition before copying


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21113 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a5fa64b505d5c014027f2198476c806a337e068f 01-Feb-2006 Jérôme Duval <korli@users.berlios.de>

some changes : alert if free space isn't enough, set status when mouse is over packages (doesn't work for some reason ...)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16192 a95241bf-73f2-0310-859d-f6bbb57e9c96


# cbdfe279477d8a54af8cc2459c95129cc279f660 23-Jan-2006 Jérôme Duval <korli@users.berlios.de>

reworked a bit to install packages


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16048 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 46065378112a4b12be63fcbd5ea3da02f73c9077 20-Jan-2006 Jérôme Duval <korli@users.berlios.de>

actually uses the copyengine looper to handle the copy process


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16011 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ebc8a403e56695c94de08e50957e9ceb218e0976 04-Jan-2006 Jérôme Duval <korli@users.berlios.de>

Installer makes use of FSCopyFolder in libtracker.so


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15839 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1eedf230816a2618554a059f2d235dbdd53befb4 26-Oct-2005 Jérôme Duval <korli@users.berlios.de>

now populates menus
improved size to string formating for GB and TB


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14531 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1a8f53bbf7c3604617ef0c2164fd4157289e4c4a 19-Oct-2005 Jérôme Duval <korli@users.berlios.de>

added a SourceVisitor and a TargetVisitor to go through BDiskDevice and BPartition objects


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14424 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b461fb1d4b16336f284c500d47e246c66b1d659a 18-Oct-2005 Jérôme Duval <korli@users.berlios.de>

added a haiku logo from stippi, thanks!
enlarged the window
improves widget placement


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14419 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 633dee064e847e9bd9857193f7ae861e10ab21ab 30-Sep-2005 Jérôme Duval <korli@users.berlios.de>

fix packages view, added a copy engine class


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14283 a95241bf-73f2-0310-859d-f6bbb57e9c96