tools/bmap-tools.git
11 years agoRELEASE_NOTES: add a record for release 2.4
Artem Bityutskiy [Mon, 3 Jun 2013 12:57:57 +0000 (15:57 +0300)]
RELEASE_NOTES: add a record for release 2.4

Change-Id: Ie3177b1ad7cc9f0c03dd0ce1388ffb203d2bbe6b
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: add support for ssh:// URLs
Artem Bityutskiy [Mon, 3 Jun 2013 12:47:37 +0000 (15:47 +0300)]
TransRead: add support for ssh:// URLs

This patch adds support for flashing from an SSH source. I need this
functionality, for example, when I build images on a remote host, but flash
them locally, and I want bmaptool to read the image directly from the SSH
host.

Unfortunately, liburl2 does not support ssh:// URLs, and there seem to be no
standard python libraries for such URLs. There is a "paramiko" python module,
but it is not a standard part of python, and not at least Tizen does not have
it, so I do not want to use it.

Thus, I use the system 'ssh' tool directly. Note, the paramiko module actually
does the same.

Both password and key authentication types are supported. In order to use
password authentication, the password has to be passed via URL:

bmaptool copy ssh://user:pass@host:path destination

If the URL does not contain a password, we assume key-based authentication is
configured.

Change-Id: Ief72b5bf9adc3e67f25009dc47a90767741826eb
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransFile: introduce "_force_fake_seek" attribute
Artem Bityutskiy [Mon, 3 Jun 2013 11:02:16 +0000 (14:02 +0300)]
TransFile: introduce "_force_fake_seek" attribute

TransFile object provide read interface to compressed and/or remote files.
TransFile objects also allow seeking files forward. When the file happens to be
a local uncompressed file, seeking is done using the native 'seek()' method.
Otherwise, we emulate this by just reading the required amount of bytes from the
file and discarding the data.

The way we detect whether we can seek using the native method or not is that we
call 'hasattr(file_obj, "seek")', and if the file object has the "seek()"
method, we use it.

However, there are situations when a files have the "seek()" method, but it is
not really usable. For example, stdout.

This patch introduces an internal attribute named "_force_fake_seek", which
will force fake seek implementation for such file objects.

We do not need this change right now, but will need it soon. So this is just a
preparation for the coming changes.

Change-Id: I0128499e7c3fba0b6aa665ece405ecb33085d4be
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoRELEASE_NOTES: improve 2.3 release notes v2.3
Artem Bityutskiy [Tue, 7 May 2013 12:11:27 +0000 (15:11 +0300)]
RELEASE_NOTES: improve 2.3 release notes

Change-Id: If40be06cc19ed45419b4cef65e72a952a7b053cc
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoRelease version 2.3
Artem Bityutskiy [Mon, 6 May 2013 08:00:48 +0000 (11:00 +0300)]
Release version 2.3

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agodocs: update release notes for release 2.3
Artem Bityutskiy [Mon, 6 May 2013 07:55:29 +0000 (10:55 +0300)]
docs: update release notes for release 2.3

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: verify bmap file checksum
Artem Bityutskiy [Mon, 6 May 2013 14:51:58 +0000 (17:51 +0300)]
BmapCopy: verify bmap file checksum

If bmap file format is greater than 1.3, verify its integrity by checking the
SHA1 checksum.

Change-Id: I2b1ed51d9eda71fe3f3681cc92314b1bcc83a23f
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCreate: generate bmap file checksum
Artem Bityutskiy [Mon, 6 May 2013 14:25:39 +0000 (17:25 +0300)]
BmapCreate: generate bmap file checksum

I got a bug report recently and the investigation showed that it is caused by
corrupted bmap file. Once the user re-downloaded the bmap file, the problem
was solved.

This patch tries to improve robustness by protecting the bmap file with SHA1
checksum. At the very end we calculate the SHA1 checksum of the entire bmap
file with the in-file SHA1 value = all zeroes, and put the result to the bmap
file.

In order to verify the checksum, we will have to substitute the SHA1 checksum
with all zeroes again and calculate SHA1 of the file.

Change-Id: Ia8f109c8238a0e5e2e609f53255a699b35d72cde
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: fix pylint warning
Artem Bityutskiy [Mon, 6 May 2013 14:55:23 +0000 (17:55 +0300)]
TransRead: fix pylint warning

Remove an unused module.

Change-Id: I8f6ddc09d49fa4664130b7fc329ee417903529d7
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCreate: enable scalability optimization
Artem Bityutskiy [Mon, 6 May 2013 14:12:25 +0000 (17:12 +0300)]
BmapCreate: enable scalability optimization

This patch changes the layout of the bmap file a little bit. Before this
change, we wrote the mapped blocks count at the very end, because we only knew
at the very end.

In BmapCopy we need to know the amount of mapped blocks before we start
copying, and this forces us to read entire bmap file to find out the amount of
mapped blocks. This is not an issue when bmap file is small, but if it gets a
lot bigger, this becomes a lot slower.

In this patch, we change bmap file layout a little bit and now we put the
mapped block cound at the beginning of the bmap file. This makes it possible to
parse it more effeciently. This also makes it more human readable.

Change-Id: Id9466ed4a45678a60506d32abe17845e29b79b59
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: implement local caching
Artem Bityutskiy [Mon, 6 May 2013 12:45:04 +0000 (15:45 +0300)]
TransRead: implement local caching

Teach TransRead to cache remote and compressed files with local uncompressed
files, which makes it possible to use operations like mmap and so on. This
patch adds a 'local' parameter to the TransRead constructor which is 'False' by
default, and when it is 'True', TransRead creates a local copy of the back-end
file.

Change-Id: I1bef11c132bb2750c8cb983ff7cdc5180a75bb66
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: allow reading entire file
Artem Bityutskiy [Mon, 6 May 2013 12:13:49 +0000 (15:13 +0300)]
TransRead: allow reading entire file

The 'read()' method of python file objects does not require the user specifying
the size, and allows for negative size as well. In this case it just reads
entire file. Ament TransRead to also follow this convention.

Change-Id: I3c0c645d458654711f3dc7a832aaec427d4abd00
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptools: amend commentaries about file-like objects
Artem Bityutskiy [Mon, 6 May 2013 12:11:20 +0000 (15:11 +0300)]
bmaptools: amend commentaries about file-like objects

In some places we require true file objects, i.e., they should be backed by
real files. However, comments just tell about file-like objects. Amend the
comments.

Change-Id: I90934f18558c6e9e8706c7cd62702c301099283d
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: improve error message
Artem Bityutskiy [Mon, 6 May 2013 10:16:46 +0000 (13:16 +0300)]
BmapCopy: improve error message

Change-Id: I350b7beb9491bde82bbdad8890f147a7f69d14ab
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: provide bmap version major and minor numbers
Artem Bityutskiy [Mon, 6 May 2013 10:04:36 +0000 (13:04 +0300)]
BmapCopy: provide bmap version major and minor numbers

Besides providing the full string version, provide also the major and minor
components of the version as ingegers. This is going to be useful soon.

Change-Id: Id2ae76cd46066ca8b6159e0232a7955de25eb404
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: do not feed stdout to BmapCreate
Artem Bityutskiy [Fri, 3 May 2013 13:48:40 +0000 (16:48 +0300)]
bmaptool: do not feed stdout to BmapCreate

We are going to modify BmapCreate to support bmap file checksum. And we'll have
to seek the bmap file. However, the problem is that bmaptool may feed
BmapCreate with stdout which is not seekable.

This patch changes bmaptool and makes it create a temporary file when the user
does not specify the output file, give it to BmapCreate, and then print the
contents of the file to stdout. We use the 'NamedTemporaryFile' python method
which automatically removes the file when the program crashes or is interrupted
with Ctrl-C.

Change-Id: I0ad16136111095b04cf3a0e9223c004b493c26de
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: assign user-friendly names to file objects
Artem Bityutskiy [Mon, 6 May 2013 09:29:22 +0000 (12:29 +0300)]
bmaptool: assign user-friendly names to file objects

Just like many things in python, BmapCopy assumes that file-like objects'
'name' attribute contains something user-frienly. And this is the case in most
of the cases, except one case. If the file object was created using
'os.fdopen()', the name will be '<fdopen>', instead of something user-friendly.
And bmaptool uses 'os.fdopen()' when opening block devices, because we need to
use special open flags. This results in poor error messages like this:

bmaptool: ERROR: wrote 187980 blocks from image
  'ivi-wayland-tizen-2.0a_20130501.1-sdb.raw.bz2' to '<fdopen>' ...

And the problem is that you cannot change the name - it is a read-only
attribute. This problem will probably be resolved in python 3, but not in 2.x,
see http://bugs.python.org/issue1625576

This patch works-around the problem by creating own simple dummy class which
overrides the name.

Change-Id: Ia6c8565c414c5e57d294d83c0fe5758e7b5aa518
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agotests: do not truncate too far
Artem Bityutskiy [Fri, 3 May 2013 05:57:32 +0000 (08:57 +0300)]
tests: do not truncate too far

This patch changes the '_create_random_sparse_file()' function behavier a
little and teaches it to not truncate files too far. For example, if we
asked '_create_random_sparse_file()' to create an 8193 bytes sparse file,
it could do the following:

1. Map the first 4KiB block
2. Map the second 4KiB block
3. Truncate to 12KiB
4. And at the end truncate to 8183 bytes

This worked fine on ext4 - we ended up with a file with 2 first blocks mapped
and an unmapped block at the end. However, on btrfs this leads to a file with
all 3 blocks mapped (I assume 1 block = 4KiB). And this is not a bug, this is
just how btrfs allocates blocks and we cannot, generally speaking, make any
assumptions about the allocation algorithms.

This patch changes '_create_random_sparse_file()' and makes it avoid truncating
files too far. Namely, we will truncate only to the end of the last block.

Now the tests pass on btrfs (kernel version 3.8.6).

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
11 years agoRelease version 2.2 v2.2
Artem Bityutskiy [Mon, 11 Mar 2013 12:43:22 +0000 (14:43 +0200)]
Release version 2.2

Change-Id: I6bc0773f3faff84e53d46d5997d419ed349ea26a
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoRELEASE_NOTES: amendments and prepare for release 2.2
Artem Bityutskiy [Fri, 8 Mar 2013 09:09:27 +0000 (11:09 +0200)]
RELEASE_NOTES: amendments and prepare for release 2.2

Create own section for release 2.1, and start preparing for release 2.2 by
describing the 2.2 changes.

Change-Id: I621ae05085e2b6a432b66cc9d4ab9c968f38afba
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: support URLs with user name and password
Artem Bityutskiy [Fri, 8 Mar 2013 08:35:52 +0000 (10:35 +0200)]
TransRead: support URLs with user name and password

Markus Lehtonen reported that bmaptool does not support URLs which contain user
name and password, e.g., https://marquiz:qwerty@server.com/nice.image.bz2.

This patch adds the corresponding support. What we do is we first parse the URL
and try to figure out if it contains user name and password, and if it does,
open the URL with a specially build opener which supports authentication.

Change-Id: I517eb9ffd21ff5de6e9deac4c0cacffe82e53ad5
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: handle more exceptions
Artem Bityutskiy [Fri, 8 Mar 2013 07:50:31 +0000 (09:50 +0200)]
TransRead: handle more exceptions

Handle a couple of exceptions from httplib which may be caused by incorrect
URL. Just catch them, and re-raise with a more understandable error message.
The TransRead user will catch it and exit nicely, without a scary stackdupm
like this:

Traceback (most recent call last):
  File "./bmaptool", line 389, in <module>
    sys.exit(main())
  File "./bmaptool", line 373, in main
    args.func(args, log)
  File "./bmaptool", line 154, in copy_command
    copy_command_open_all(args, log)
  File "./bmaptool", line 109, in copy_command_open_all
    image_obj = TransRead.TransRead(args.image)
  File "/mnt/bigssd/dedekind/work/tizen/git/bmap-tools/bmaptools/TransRead.py", line 232, in __init__
    self._open_url(filepath)
  File "/mnt/bigssd/dedekind/work/tizen/git/bmap-tools/bmaptools/TransRead.py", line 210, in _open_url
    self._file_obj = opener.open(url)
  File "/usr/lib64/python2.7/urllib2.py", line 400, in open
    response = self._open(req, data)
  File "/usr/lib64/python2.7/urllib2.py", line 418, in _open
    '_open', req)
  File "/usr/lib64/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/usr/lib64/python2.7/urllib2.py", line 1215, in https_open
    return self.do_open(httplib.HTTPSConnection, req)
  File "/usr/lib64/python2.7/urllib2.py", line 1174, in do_open
    h.request(req.get_method(), req.get_selector(), req.data, headers)
  File "/usr/lib64/python2.7/httplib.py", line 958, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib64/python2.7/httplib.py", line 992, in _send_request
    self.endheaders(body)
  File "/usr/lib64/python2.7/httplib.py", line 954, in endheaders
    self._send_output(message_body)
  File "/usr/lib64/python2.7/httplib.py", line 814, in _send_output
    self.send(msg)
  File "/usr/lib64/python2.7/httplib.py", line 776, in send
    self.connect()
  File "/usr/lib64/python2.7/httplib.py", line 1160, in connect
    self._tunnel()
  File "/usr/lib64/python2.7/httplib.py", line 741, in _tunnel
    (version, code, message) = response._read_status()
  File "/usr/lib64/python2.7/httplib.py", line 371, in _read_status
    raise BadStatusLine(line)
httplib.BadStatusLine: ''

Change-Id: I48c0f63a6c33c816eb8cc833aeb400682c0f861f
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: introduce a helper for opening URLs
Artem Bityutskiy [Fri, 8 Mar 2013 07:47:42 +0000 (09:47 +0200)]
TransRead: introduce a helper for opening URLs

Indroduce an '_open_url()' helper method which opens an URL. This helper will
be useful soon, because we are going to make the URL opening a bit more
complex.

Change-Id: Iaab56d85eef46ed3f1ebc8be37950443100f4d84
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: relocate the close method
Artem Bityutskiy [Fri, 8 Mar 2013 07:45:31 +0000 (09:45 +0200)]
TransRead: relocate the close method

This is a minor change which relocates the 'close' method to a different place,
in order to keep all the file methods together.

Change-Id: I8a7e481d2788951500c6532bcd2af92bcad57827
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoREADME: minor typo fix
Artem Bityutskiy [Tue, 26 Feb 2013 09:13:12 +0000 (11:13 +0200)]
README: minor typo fix

Change-Id: Ifcd8b7b6a0172e47fb78f6115c4aaf9f826cd5c7
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agopackaging: correct dependencies for Centos6
Artem Bityutskiy [Mon, 25 Feb 2013 07:34:05 +0000 (09:34 +0200)]
packaging: correct dependencies for Centos6

Centos6 uses python 2.6 which does not have the argparse module that we use.
However, there is a possibility to add the argparse module by installing the
'python-argparse' package which is available from 3rd party Centos6
repositories. Thus, add the corresponding dependency for Centos6.

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
11 years agotest_fiemap: fix pylint warning
Artem Bityutskiy [Fri, 22 Feb 2013 09:22:34 +0000 (11:22 +0200)]
test_fiemap: fix pylint warning

Using builtins like 'filter()' is discouraged nowadays, and pylint generates
this warning:

W: 46,22:_check_ranges: Used builtin function 'filter'

Use a generator expression instead of the 'filter' built-in.

Change-Id: I0b07685967927a84804d443f22369d68da106af3
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: disable a flals pylint warning
Artem Bityutskiy [Thu, 21 Feb 2013 12:00:13 +0000 (14:00 +0200)]
BmapCopy: disable a flals pylint warning

Silence this one:
W:275,0: Anomalous backslash in string: '\0'. String constant might be missing an r prefix.

Change-Id: I816d20f284154f2c424a35090461db5a265edcbb
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: fix writitng to a dm-zero device
Artem Bityutskiy [Thu, 21 Feb 2013 11:28:40 +0000 (13:28 +0200)]
BmapCopy: fix writitng to a dm-zero device

Dm-zero devices expose "none" in their '/sys/block/<disk>/queue/scheduler' file
and there is no current scheduler. Our code was assuming there is always the
current scheduler in brackets (e.g., "noop deadline [cfq]"), which lead to a
crash when writing to a dm-zero device:

Traceback (most recent call last):
  File "./bmaptool", line 389, in <module>
    sys.exit(main())
  File "./bmaptool", line 373, in main
    args.func(args, log)
  File "./bmaptool", line 192, in copy_command
    writer.copy(False, not args.no_verify)
  File "/mnt/bigssd/dedekind/work/tizen/tools/git/bmap-tools/bmaptools/BmapCopy.py", line 578, in copy
    self._tune_block_device()
  File "/mnt/bigssd/dedekind/work/tizen/tools/git/bmap-tools/bmaptools/BmapCopy.py", line 535, in _tune_block_device
    self._old_scheduler_value = match.group(1)
AttributeError: 'NoneType' object has no attribute 'group'

This patch fixes the crash.

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
Change-Id: Ic13f4f69ee859244e5413d4b0b890d6c599becae

11 years agoTransRead: limit the amount of bytes we read at a time
Artem Bityutskiy [Thu, 21 Feb 2013 11:06:23 +0000 (13:06 +0200)]
TransRead: limit the amount of bytes we read at a time

In the function which implements fake seek forward we first calculate the
amount of bytes we have to read from the file to seek forward to the requisted
position, and then read that data in one go. However, the seek may be really
far forward, and we'll end up reading really a lot of data in one go, which
leads to high memory consumption.

This patch fixes the issue by limiting the amount of data we read in one go to
1MiB.

Change-Id: Idfdde2e432c216de34b4675e47c859f5e68a2928
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: print useful information in sace of MemoryError
Artem Bityutskiy [Thu, 21 Feb 2013 09:56:25 +0000 (11:56 +0200)]
bmaptool: print useful information in sace of MemoryError

Catch the MemoryError exception which means that the script ran out of memory
and print useful debugging information in this case (/proc/meminfo and
/proc/self/status).

Change-Id: Ie52b8426867366d5a5110f91f8731c8c9b3b7f54
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: silence few false pylint warnings
Artem Bityutskiy [Thu, 21 Feb 2013 09:00:49 +0000 (11:00 +0200)]
bmaptool: silence few false pylint warnings

W:339,0: Anomalous backslash in string: '\0'. String constant might be missing an r prefix.
W:340,0: Anomalous backslash in string: '\0'. String constant might be missing an r prefix.
W:341,0: Anomalous backslash in string: '\0'. String constant might be missing an r prefix.

Change-Id: I182700967c1efab7137ae368246e5a9537e14976
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: remove an unused variable
Artem Bityutskiy [Thu, 21 Feb 2013 08:40:10 +0000 (10:40 +0200)]
bmaptool: remove an unused variable

Change-Id: I71870ad52cdc4ea374ad1907526bd8d3c3dad6e0
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: minor white-space cleanup
Artem Bityutskiy [Thu, 21 Feb 2013 08:39:19 +0000 (10:39 +0200)]
bmaptool: minor white-space cleanup

Change-Id: I2c50ddf8c98819c9178133fc81943f4ef373d8a7
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoReally release version 2.1 v2.1
Artem Bityutskiy [Wed, 20 Feb 2013 12:27:47 +0000 (14:27 +0200)]
Really release version 2.1

Change-Id: I5560450707065676847828f2a7a2ffde67b50b7c
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoRelease version 2.1
Artem Bityutskiy [Mon, 18 Feb 2013 14:40:57 +0000 (16:40 +0200)]
Release version 2.1

Change-Id: Ib03595e0a404ec0a31efdf6a8aa84d49e656e78b
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agotests: make tests work in Fedora 18
Artem Bityutskiy [Mon, 18 Feb 2013 14:47:58 +0000 (16:47 +0200)]
tests: make tests work in Fedora 18

The tests create many temporary files and run FIEMAP on them. However, in
Fedora 18 the '/tmp' is tmpfs which does not support FIEMAP, so 'nosetests'
fails. Let's use the current directory for the tests instead.

Change-Id: I2cc2d402fd15517e043e38188d3046876a11cbec
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: fix out of memory issues with bzip2 files
Artem Bityutskiy [Mon, 18 Feb 2013 14:25:06 +0000 (16:25 +0200)]
TransRead: fix out of memory issues with bzip2 files

This commit fixes a 'bmaptool copy' problem with the following symptom:

Traceback (most recent call last):
  File "./bmaptool", line 372, in <module>
    sys.exit(main())
  File "./bmaptool", line 369, in main
    args.func(args, setup_logger(loglevel))
  File "./bmaptool", line 191, in copy_command
    writer.copy(False, not args.no_verify)
  File "/opt/home/root/bmap/bmap-tools-2.0/bmaptools/BmapCopy.py", line 580, in copy
    BmapCopy.copy(self, sync, verify)
  File "/opt/home/root/bmap/bmap-tools-2.0/bmaptools/BmapCopy.py", line 368, in _get_data
    self._f_image.seek(first * self.block_size)
  File "/opt/home/root/bmap/bmap-tools-2.0/bmaptools/TransRead.py", line 247, in seek
    self._transfile_obj.seek(offset, whence)
  File "/opt/home/root/bmap/bmap-tools-2.0/bmaptools/TransRead.py", line 69, in seek
    self._pos = _fake_seek_forward(self, self._pos, offset, whence)
  File "/opt/home/root/bmap/bmap-tools-2.0/bmaptools/TransRead.py", line 33, in _fake_seek_forward
    buf = file_obj.read(to_read)
  File "/opt/home/root/bmap/bmap-tools-2.0/bmaptools/TransRead.py", line 102, in read
    data = self._read_from_buffer(size)
  File "/opt/home/root/bmap/bmap-tools-2.0/bmaptools/TransRead.py", line 81, in _read_from_buffer
    data = self._buffer[self._buffer_pos:self._buffer_pos + length]
MemoryError

The reason is that bmaptool runs out of memory when copying a bzip2-compressed
file which has large chunks of zeroes.

I experimented a bit with a 4GiB file full of zeroes and compressed with bzip2.
The memory consumption of 'bmaptool copy' was about 1.4GiB! The reason is that
we read 128KiB of compressed input and decompress them in one go, which results
in a huge output array. The situation with gzip2 is similar, but less severe.

This patch adds a 'chunk_size' parameter to the '_CompressedFile' class
constructor which we can use to limit the maximum amount of data we decompress
at a time. For .bz2 files I found 128bytes to be reasonable, and for gzip files
the default 128KiB seems to be just fine.

Change-Id: Iaeadb69e21332069f0de8b7ce40b7dc72e7b0e02
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: minor nicification
Artem Bityutskiy [Mon, 18 Feb 2013 13:57:38 +0000 (15:57 +0200)]
TransRead: minor nicification

The 'decompress_func' argument of the '_CompressedFile' class constructor is
optional, so make it be 'None' by default.

Change-Id: I94e8fc185ae4ccc3e1fc2312dc943908dc7ecdd9
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoRELEASE_NOTES: tell that map page was added
Artem Bityutskiy [Fri, 18 Jan 2013 15:20:57 +0000 (17:20 +0200)]
RELEASE_NOTES: tell that map page was added

Change-Id: I9963416ec0c797664a8d4aeff755e73e5edef8c5
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agopackaging: add man pages
Artem Bityutskiy [Fri, 18 Jan 2013 14:40:38 +0000 (16:40 +0200)]
packaging: add man pages

Change-Id: Id52d41c844ccc25d0189484467674263876ac12e
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoRemove the TODO file
Artem Bityutskiy [Fri, 18 Jan 2013 14:29:11 +0000 (16:29 +0200)]
Remove the TODO file

.. as it is empty now.

Change-Id: I7a58e103cf65dba0706edc4f3a8ef5a8367cbcac
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoAdd bmaptool man page
Artem Bityutskiy [Fri, 18 Jan 2013 14:28:47 +0000 (16:28 +0200)]
Add bmaptool man page

Change-Id: I9a0e7b29e3d0506801f04000cd20eb4283c253b3
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agodocs: move documentation to a separate sub-directory
Artem Bityutskiy [Fri, 18 Jan 2013 10:41:27 +0000 (12:41 +0200)]
docs: move documentation to a separate sub-directory

Change-Id: Ife1ba4593725f1691b1cfddd76ff034adecd54c5
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoRELEASE_NOTES: a minor fix
Artem Bityutskiy [Fri, 18 Jan 2013 06:51:20 +0000 (08:51 +0200)]
RELEASE_NOTES: a minor fix

Change-Id: I67f781769d212da9e5ec1af337cfaf230f8647da
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoRelease version 2.0 v2.0
Artem Bityutskiy [Thu, 17 Jan 2013 09:36:04 +0000 (11:36 +0200)]
Release version 2.0

Change-Id: I2b6233c43a52b4d4a405584e7f548c0128b22016
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: fix a MemoryError issu
Artem Bityutskiy [Thu, 17 Jan 2013 09:08:01 +0000 (11:08 +0200)]
TransRead: fix a MemoryError issu

Sometimes we run out of memory in TransRead.py, as it was reported by
Dawei Wu <daweix.wu@intel.com>. I believe the problem is that we read too much
of compressed data at a time. If the data contain all zeroes, they are
decompressed into a huge buffer.

Change-Id: I4090cef33dd1afed1015bd29517ac1b8abec9ffa
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: fix corner case in the fake seek function
Artem Bityutskiy [Thu, 17 Jan 2013 08:21:07 +0000 (10:21 +0200)]
TransRead: fix corner case in the fake seek function

When seeking beyond the file, the fake seek function returned incorrect value.
Fix this.

Change-Id: I44f043e6504d99e6e46beb8e29206d3e2fee119e
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoPre-release version 2.0-rc5
Artem Bityutskiy [Tue, 15 Jan 2013 12:53:16 +0000 (14:53 +0200)]
Pre-release version 2.0-rc5

Change-Id: Iad8b4cadbcc294d15bb756ab7dc7e1afbf1b8110
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTODO: remove an entry about locking
Artem Bityutskiy [Mon, 14 Jan 2013 15:17:24 +0000 (17:17 +0200)]
TODO: remove an entry about locking

Let's add it when/if it is really needed.

Change-Id: I560093f9cf5335d0bb361cb188be8c4ceb62ce81
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: restore the block device settings
Artem Bityutskiy [Mon, 14 Jan 2013 14:46:42 +0000 (16:46 +0200)]
BmapCopy: restore the block device settings

Always restore the block device settings at the end.

Change-Id: I04ba70598b2e9616d22790248795a460ec710400
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: fail if an optimization did not work
Artem Bityutskiy [Mon, 14 Jan 2013 14:35:13 +0000 (16:35 +0200)]
BmapCopy: fail if an optimization did not work

Instead of hiding failures when we are enabling optimizations - fail. This way
we'll at least notice them.

Change-Id: I683b14188b3181ee4d8bfcf8fca137cd0984e4b2
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: do not check for os.path.exists exceptions
Artem Bityutskiy [Mon, 14 Jan 2013 14:16:20 +0000 (16:16 +0200)]
BmapCopy: do not check for os.path.exists exceptions

It is very unlikely that it fails, but if it does, we'll just have an unhandled
exception, which is fine in this case.

Change-Id: If89940b0e38ed9874380788c088f44e733d6435f
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoREADME: minor amendments
Artem Bityutskiy [Mon, 14 Jan 2013 09:19:45 +0000 (11:19 +0200)]
README: minor amendments

Change-Id: I474127bf49036db5c35f66e3e8b968f5a4db209e
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoPre-release 2.0-rc4
Artem Bityutskiy [Mon, 7 Jan 2013 08:21:54 +0000 (10:21 +0200)]
Pre-release 2.0-rc4

Change-Id: I0f848639ca9b12cd2ca14bfa0523df729b4b5358
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: improve --nobmap error message
Artem Bityutskiy [Tue, 8 Jan 2013 15:02:34 +0000 (17:02 +0200)]
bmaptool: improve --nobmap error message

Change-Id: Iccf3994c83fb461105010f6d771f5b091c396840
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: fix flashing without bmap
Artem Bityutskiy [Tue, 8 Jan 2013 15:00:03 +0000 (17:00 +0200)]
bmaptool: fix flashing without bmap

The auto-discovery function was buggy and returned a junk bmap file name if no
bmap files was found.

Change-Id: I2ab3db14dcccd72e687e6afb8e3cfcaa9c827452
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoPre-release 2.0-rc3
Artem Bityutskiy [Mon, 7 Jan 2013 08:21:54 +0000 (10:21 +0200)]
Pre-release 2.0-rc3

Change-Id: I54f2f8ed3401a67be28937708085c1c295ac95f2
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: catch ValueError exceptions
Artem Bityutskiy [Fri, 4 Jan 2013 14:46:31 +0000 (16:46 +0200)]
TransRead: catch ValueError exceptions

Sometimes urllib2 throws ValueError exceptions when it cannot open a local
file. Catch it as well.

Change-Id: I1f5707ad37d079368a2bf4b3ed3d092c43064387
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoPre-release 2.0-rc2
Artem Bityutskiy [Fri, 4 Jan 2013 07:57:54 +0000 (09:57 +0200)]
Pre-release 2.0-rc2

Change-Id: I43508315224221e42dbf149dd026b0636b17358e
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: slight readability imporovement
Artem Bityutskiy [Fri, 4 Jan 2013 07:47:22 +0000 (09:47 +0200)]
bmaptool: slight readability imporovement

Full paths may be very long, so print only basenames in the informational
messages.

Change-Id: Iae2a1a35112f1da3f6d613b33d986d60ffe7c5e5
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: add image_size parameter to BmapBdevCopy constructor
Mikko Ylinen [Fri, 4 Jan 2013 07:39:39 +0000 (09:39 +0200)]
bmaptool: add image_size parameter to BmapBdevCopy constructor

Align BmapBdevCopy class contructor parameters with BmapCopy
class consturctor parameters.

Change-Id: Idc941e0f4baaeee5c8f52772aa536e56848129fa
Signed-off-by: Mikko Ylinen <mikko.ylinen@intel.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: print auto-discovered bmap file correctly
Artem Bityutskiy [Fri, 4 Jan 2013 07:34:21 +0000 (09:34 +0200)]
bmaptool: print auto-discovered bmap file correctly

When the bmapfile was auto-discovered, we did not print its name correctly.

Change-Id: Ief4747ccc401219ac2cd546e6a0c2b00f5b020ff
Reported-by: Mikko Ylinen <mikko.ylinen@intel.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoPre-release 2.0-rc1
Artem Bityutskiy [Thu, 20 Dec 2012 08:52:10 +0000 (10:52 +0200)]
Pre-release 2.0-rc1

Change-Id: I0a46065988a14183ee33c49fc571974f4b09d188
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: implement progress wheel
Artem Bityutskiy [Thu, 20 Dec 2012 11:21:19 +0000 (13:21 +0200)]
BmapCopy: implement progress wheel

.. for the cases when the image size is not known.

Change-Id: I44a892aca1a34f1acc47aef396dfb4c27717bb1b
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: do not discover bmap if --nobmap was given
Artem Bityutskiy [Thu, 20 Dec 2012 11:20:56 +0000 (13:20 +0200)]
bmaptool: do not discover bmap if --nobmap was given

Change-Id: Ia4dcfa3da319d079500b0849f07f52633534d464
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoRELEASE_NOTES: prepare 2.0-rc1 release notes
Artem Bityutskiy [Thu, 20 Dec 2012 08:41:26 +0000 (10:41 +0200)]
RELEASE_NOTES: prepare 2.0-rc1 release notes

Change-Id: Ie7744bd4d0bbdac644dcf56b4870eb31e891bfeb
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTODO: remove a done entry
Artem Bityutskiy [Thu, 20 Dec 2012 08:25:59 +0000 (10:25 +0200)]
TODO: remove a done entry

Change-Id: Ie27fe214f2d6668536b05e96b5596064dd6ae0a8
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: do not print progress bar when --quiet was used
Artem Bityutskiy [Thu, 20 Dec 2012 08:23:25 +0000 (10:23 +0200)]
bmaptool: do not print progress bar when --quiet was used

Change-Id: Ibffa68a2dd2d541b37e187cd81e50b9e4bad7bee
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: provied a link to the docs in help output
Artem Bityutskiy [Thu, 20 Dec 2012 08:21:19 +0000 (10:21 +0200)]
bmaptool: provied a link to the docs in help output

Change-Id: Id4d130ee29af411119ff5218ff99190f011f12a8
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: fix opening URLs
Artem Bityutskiy [Wed, 19 Dec 2012 16:25:57 +0000 (18:25 +0200)]
TransRead: fix opening URLs

Proxy did not work.

Change-Id: I0e7bf28bc7bf232a24aaa1a3898188a9c3207621
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agobmaptool: implement automatic bmap file discovery
Artem Bityutskiy [Wed, 19 Dec 2012 15:55:53 +0000 (17:55 +0200)]
bmaptool: implement automatic bmap file discovery

Change-Id: I25abad028cab641ab6a143562783d8cbe516ff1e
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTODO: add another item
Artem Bityutskiy [Wed, 19 Dec 2012 14:28:12 +0000 (16:28 +0200)]
TODO: add another item

Change-Id: I766107ec1d93fed45f4e9dfa17623d0c1fae5f2d
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: small documentation improvements
Artem Bityutskiy [Wed, 19 Dec 2012 14:13:06 +0000 (16:13 +0200)]
BmapCopy: small documentation improvements

Change-Id: I8e39c895d930ea8d9eeef1ff80cb45cc0e359819
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: fix few pylint warnings
Artem Bityutskiy [Wed, 19 Dec 2012 14:09:51 +0000 (16:09 +0200)]
TransRead: fix few pylint warnings

Change-Id: I19af8f035c3469fc4035a0f075100f230475e06b
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: improve comments a bit
Artem Bityutskiy [Wed, 19 Dec 2012 14:08:43 +0000 (16:08 +0200)]
TransRead: improve comments a bit

Change-Id: I80ef9be8e7ab82935c2da26e902749c2ff74a18a
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agotest_api_base: test urllib2 as well
Artem Bityutskiy [Mon, 17 Dec 2012 15:07:13 +0000 (17:07 +0200)]
test_api_base: test urllib2 as well

Prepend "file:" to file names sometimes to make all the I/O go through urllib2.

Change-Id: I0ed499f33edb7b7c2ec43a69bec4ed781716a8b3
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: cleanup fake seek
Artem Bityutskiy [Wed, 19 Dec 2012 13:47:37 +0000 (15:47 +0200)]
TransRead: cleanup fake seek

Instead of patching objects run-time, just add seek() and tell() methods
to classes we need to support and use a helper '_fake_seek_forward()' function
from there. This is cleaner.

Change-Id: Ib8ca83eb078322e5468206b4440051451eac70ab
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: make error message more verbose
Artem Bityutskiy [Wed, 19 Dec 2012 13:07:59 +0000 (15:07 +0200)]
BmapCopy: make error message more verbose

Print all file names in case of short read/write error.

Change-Id: If86e676541371d246f4202a736604d4024cbe6b6
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: print file name as well
Artem Bityutskiy [Wed, 19 Dec 2012 09:00:11 +0000 (11:00 +0200)]
BmapCopy: print file name as well

When printing about SHA1 mismatch, also print the image file name.

Change-Id: I5c5aeea63943e15dfecc8a00db92e620cb45c7f9
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: switch to stream tar decompression
Artem Bityutskiy [Wed, 19 Dec 2012 11:05:41 +0000 (13:05 +0200)]
TransRead: switch to stream tar decompression

Unfortunatelly we lose the check for amount of members, because it is not
compatible with stream extraction as it generates random seeks.

Change-Id: I5b56d2283abeca298e90c212d460049fd06b4a4c
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: switch to CompressedFile for gzip compression
Artem Bityutskiy [Wed, 19 Dec 2012 10:40:23 +0000 (12:40 +0200)]
TransRead: switch to CompressedFile for gzip compression

Switch to use the '_CompressedFile' class for gzip files as well. The benefit
is that it does not require 'seek()' in the underlying file object, which
urllib2 does not provide.

Change-Id: Id737374885b29cf162976cea4a249ded55f5978f
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: get rid of the __getattr__ method
Artem Bityutskiy [Wed, 19 Dec 2012 09:41:08 +0000 (11:41 +0200)]
TransRead: get rid of the __getattr__ method

The TransRead class implements very limited file-like objects. It is safer
to explicitely specify all the methods it supports, instead of defaulting
to the methods of the underlying 'transfile_obj'.

Change-Id: I51c4ee16f0313e0b39741f10bc04d480e48d19dc
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: generalize the Bzip2Read class
Artem Bityutskiy [Wed, 19 Dec 2012 09:36:11 +0000 (11:36 +0200)]
TransRead: generalize the Bzip2Read class

Turn it into a '_CompressedFile' class which can transparently decompress any
compressed file-like object granted there is the 'decompress(buffer)' function
available.

Change-Id: I69e48052cccbd2ad7237456b1c49c4d9994522f1
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTODO: add another entry
Artem Bityutskiy [Wed, 19 Dec 2012 09:35:53 +0000 (11:35 +0200)]
TODO: add another entry

Change-Id: Ifff6c1a61f502e7b39b4d2b4bd1471b9f32fcf6c
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agotest_api_base: use stdout for progress bar
Artem Bityutskiy [Mon, 17 Dec 2012 16:21:11 +0000 (18:21 +0200)]
test_api_base: use stdout for progress bar

Because otherwise the output is visible when runnint nosetest without -s.

Change-Id: Ifa9ec61f4fdf2679bab215b316e70afcf7a6ad15
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: code re-arrangement
Artem Bityutskiy [Wed, 19 Dec 2012 09:07:52 +0000 (11:07 +0200)]
TransRead: code re-arrangement

Move class Error a little bit up.

Change-Id: Ia5308ff3fbb3f4098bd9ca01d43a814a8c6475cf
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: implement better fake seek method
Artem Bityutskiy [Fri, 14 Dec 2012 14:16:01 +0000 (16:16 +0200)]
TransRead: implement better fake seek method

Implement a generic '_add_fake_seek()' function which adds fake seek support to
any file-like object.

Also add support of URLs - open them using urllib2.

Change-Id: I20467631136031f3471f8c7d3ee79927d3fc4719
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agotest_api_base: add an extra assertion
Artem Bityutskiy [Mon, 17 Dec 2012 14:56:53 +0000 (16:56 +0200)]
test_api_base: add an extra assertion

Change-Id: Ic0aab643450b00a9d31444c2fc86102279f29ead
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agotests: helpers: remove unnecessary truncation
Artem Bityutskiy [Mon, 17 Dec 2012 14:53:02 +0000 (16:53 +0200)]
tests: helpers: remove unnecessary truncation

Change-Id: I72737ea81032cd4b72324727a9e1ae2d74b1d5c3
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agotest_base_api: generate uncompressed files as well
Artem Bityutskiy [Mon, 17 Dec 2012 13:22:21 +0000 (15:22 +0200)]
test_base_api: generate uncompressed files as well

Improve the '_generate_compressed_files()' and make it generate uncompressed
vesion of the file as well.

Change-Id: Ie2d042180a152914d42340c01e48f5a887da4185
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agotest_api_base: rework the test to match the changed API
Artem Bityutskiy [Mon, 17 Dec 2012 12:30:04 +0000 (14:30 +0200)]
test_api_base: rework the test to match the changed API

BmapCopy does not accept paths anymore - amend the tests.

Change-Id: Ib78dcceb959bce673c08bfb1dca0aa86b985c7d4
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: drop the file opening functionality
Artem Bityutskiy [Mon, 17 Dec 2012 10:42:02 +0000 (12:42 +0200)]
BmapCopy: drop the file opening functionality

The BmapCopy class is getting too large and specialized. Improve the situation
by changing the API and removing the file opening functionality. Now it
requires file-like objects all the time. The bmaptool, in turn, now opens the
files itself.

Change-Id: Id62794dfcf21e422fb5e4b9a3a025b2beb25506f
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: implement the 'name' attribute
Artem Bityutskiy [Mon, 17 Dec 2012 10:41:19 +0000 (12:41 +0200)]
TransRead: implement the 'name' attribute

The standare attribute for the file name in file objects is 'name', not
'fullpath' - rename it.

Change-Id: I4544bab07c185a730c351fcefd8ff19047162ee7
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: document that BmapCopy objects are one-time usable
Artem Bityutskiy [Mon, 17 Dec 2012 07:52:14 +0000 (09:52 +0200)]
BmapCopy: document that BmapCopy objects are one-time usable

Change-Id: I92ce7cd9444491386ababa93e9b747b00891e29a
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: implement reading from file object
Artem Bityutskiy [Fri, 14 Dec 2012 13:49:11 +0000 (15:49 +0200)]
TransRead: implement reading from file object

This patch changes the way we open the file: instead of opening by name, open
it by its file object. This is not needed right now, but one of the next
patches will implement reading from an URL, in which case we'll have to be able
to read and decompress from a urlib file-object. In other words, this is a
preparations.

The good thing is that both tarfile and gzip modules allow to open by file
objects. However, the bad news is that bzip2 module does not support this.
This is why we implement the '_Bzip2Read' class which is a simple wrapper over
bzip2's 'stream decompressor': we just read from the back-end file-like object,
stream the data trhough the bzip2 decompressor, and provide to the caller.

Change-Id: I241c1dad4a0bc9619af61f393e6834b9568545fc
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: add a /dev/null quirk
Artem Bityutskiy [Fri, 14 Dec 2012 16:12:07 +0000 (18:12 +0200)]
BmapCopy: add a /dev/null quirk

It is sometimes useful to copy to /dev/null, e.g., for benchmarking. Hoever,
the /dev/null character device does not support 'fsync()', so bmaptool dies.

Intorduce a quirk for this situation.

Change-Id: Ic61bf86ad5a4e112d7ccd82aa41114dc8b207361
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTransRead: improve file size detection
Artem Bityutskiy [Fri, 14 Dec 2012 09:38:43 +0000 (11:38 +0200)]
TransRead: improve file size detection

In case of a tar archive, we know the file size for 'TarInfo'. Propagate it to
the users via our 'size' attribute.

Change-Id: I11dc7daa1d788fe98769ba6537f4117d89d06b34
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoTODO: add an entry about improving the progress bar
Artem Bityutskiy [Fri, 14 Dec 2012 15:44:52 +0000 (17:44 +0200)]
TODO: add an entry about improving the progress bar

Change-Id: Ib7b3ca6d63ff1d1fbe5d16f96080600f4f92ff39
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>
11 years agoBmapCopy: make object one-time usable
Artem Bityutskiy [Fri, 14 Dec 2012 13:04:30 +0000 (15:04 +0200)]
BmapCopy: make object one-time usable

Make the 'BmapCopy' objects usable only once, just like many other
complex objects like Bzip2File.

The reason for this is that it is too complex to make them re-usable,
because this requires seeking image file and the destination file to the
beginning, and not all files are easily seekable.

In fact, some files are not seekable at all. So remove the unneeded
complexity.

Change-Id: I30ecdd44dead485ae9d187e3487b0efa548c15d5
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@intel.com>