| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
quilt depends on procmail because 'quilt mail' requires formail.
However, formail is only used to extract header values from messages.
Since quilt already requires sed we can replace formail -x uses with
sed instead. The sed script is slightly complicated because it
needs to handle the case of "Long Header Fields" definied in RFC
2822, but essentially all it's doing is: look for the first line
beginning with the name of header we are looking for, and print
every line until one that does not start with blanks.
|
|
|
|
| |
Add coverage of the multi-line header case to the mail test case.
|
|
|
|
|
|
|
| |
There is no good reason for the setup command to be split into two
scripts, setup and inspect. Merge inspect into setup to save the
extra interfacing overhead. Performance improvement reaches 5% on
simple packages.
|
|
|
|
|
|
|
| |
Fix funtion create_symlink. If the link has an absolute path then its
target should be set to an absolute path as well. This fixes the use
of "quilt setup" with an absolute -d path and a relative --sourcedir
path.
|
|
|
|
|
|
|
| |
Let function normalize_path handle "." path components. Otherwise
invocations like "quilt setup --sourcedir=. foo.spec" may produce
invalid series files, and "quilt setup -d ./dir foo.spec"
generates a broken "patches" link.
|
|
|
|
|
|
| |
A typo in quilt-patch-list prevents patch select completion operation.
Reviewed and tested by Satoru Takeuchi.
|
|
|
|
|
|
|
| |
quilt-find-dir goes to endless recursion if root is not '/'. This
holds for files opened with tramp for example.
Reviewed and tested by Satoru Takeuchi.
|
|
|
|
|
|
| |
If a patch file has hard links, refreshing it should break the links
so that the other copies are left unmodified. Test this behavior to
avoid breaking it accidentally.
|
|
|
|
| |
Don't test the same condition twice in a row, it's inefficient.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is an alternative implementation of "quilt setup" for rpm spec
files, which is much faster than the original implementation. The
idea is to have rpmbuild generate our working tree directly, instead
of taking note of everything it does and then replaying that record
from scratch.
The new implementation is enabled with option --fast. The original
implementation can be selected with --slow, which is the default.
Having this option makes it possible to set the default to --fast in
~/.quiltrc and revert to --slow on the command line on a case-by-case
basis. This will also make it easier if we decide to change the
default in the future.
In general, the generated working tree should be the same with --slow
or --fast. There are 3 known exceptions though:
* The header of the series files is incomplete when using --fast,
which means that you can't reuse these series files to feed "quilt
setup" later.
* If the spec file generates files other than with the tar, unzip and
patch commands, you wouldn't get these files in your working tree
with --slow, but with --fast you will.
* With --fast, all patches are added to the series file, regardless
of whether they apply or not. This also means that patches which
fail to apply are not reported as such until you attempt to push
them.
On large packages, this alternative implementation was found to be
up to 4 times faster than the original implementation.
|
|
|
|
|
|
|
| |
Trace the calls to the patch/tar/unzip wrapper earlier. That way, if
anything goes wrong, we know which type of file was being processed.
Even if nothing goes wrong, the user now sees the file type as it is
being processed (which can take a long time.)
|
|
|
|
|
|
| |
Move the code that generates the series file header to a separate
function. This makes the code easier to read due to less folding, and
this is also more efficient than spawning a subshell.
|
|
|
|
|
| |
The push --interactive option has been removed long ago, clean up
remaining references.
|
|
|
|
|
|
| |
The interactive mode was broken long ago, and not forcing the
patch causes unpredictable and confusing behavior. Now the
"patch -f" option is always used.
|
|
|
|
|
| |
Add an option to automatically refresh each patch after is was
successfully applied.
|
|
|
|
|
| |
Add an option to automatically refresh each patch before it gets
unapplied.
|
|
|
|
|
| |
In order to make "quilt_command refresh" work properly, we must ensure
that format options are passed through.
|
|
|
|
|
|
|
| |
When the wrapper script is done, it passes control back to tar, unzip
or patch. Nothing needs to be done after that, so we might as well
use exec to switch to the new process. That should be marginally
faster than regular forking.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Extra patches (typically contained in archives) end up in the working
directory, not the source directory where regular patches live. In
the most common case, it makes no difference because both directories
are the same. However, as soon as options -d or --sourcedir are used
in conjunction with extra patches, the working directory and the
source directory are different, and the paths to the extra patches in
the series file get wrong.
While we can't possible handle the case where the source and working
directories are completely different, we can easily handle the most
typical case where the working directory is a subdirectory of the
source directory.
|
|
|
|
| |
Don't test if inputfile is set twice in a row.
|
|
|
|
|
|
|
|
|
|
| |
I couldn't find any reason why the patch/tar/unzip wrapper is
generated each time inspect is invoked. Make it a separate script in
its own right and let the patch, tar and unzip links point to it.
This makes this piece of code easier to read, edit, trace and debug.
This also solves the case where the filesystem hosting the temporary
files is mounted with noexec.
|
|
|
|
|
| |
Move the path normalization code to a separate function, to avoid
redundancy and make the code more readable.
|
|
|
|
|
|
|
|
| |
A few more files can be excluded from md5sums as we know they are
neither patches nor archives:
* _constraints, _service and baselibs.conf, from the Build Service
* signature files
* rpmlintrc files
|
|
|
|
|
|
|
|
|
| |
This temporary data file is overwritten as needed and the directory
it sits in is blasted when the script exits, so there is no point in
explicitly deleting this file at the beginning of each wrapper
invocation.
This simple change speeds up "inspect" by 3-4% in my tests.
|
|
|
|
|
|
| |
The wrappers may be called before the %prep section is entered, in
which case RPM_BUILD_DIR isn't set yet. In that case we want to
pass trough transparently.
|
|
|
|
|
|
|
|
|
|
| |
Instead of exporting an arbitrary list of quilt internal variables,
which helper scripts may or may not use, let each command explicitly
export variables as needed before calling an helper script. This is
both clearer and more efficient.
In practice, only dependency-graph needs to access internal
variables at the moment, and it only uses $QUILT_PC.
|
|
|
|
|
|
|
|
| |
If the series file is inconsistent, "quilt pop" will disable the
consistency check as it updates the timestamp of the database file.
It's OK if all patches are popped. If not then the series file may
still be inconsistent. In that case, we want to update the timestamp
of the series file, to rearm the consistency check.
|
|
|
|
| |
Options -v and --sourcedir were not listed.
|
|
|
|
|
|
| |
* Drop quotes that aren't needed and break syntax highlighting in some
editors.
* Coding style cleanups.
|
|
|
|
|
|
|
|
|
| |
"quilt push 0" returns the following cryptic message:
Now at patch patches/quilt
So add the same check we already have in command pop and detect when
nothing needs to be done, returning the more sane message:
No patch applied
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Quilt allows manual changes to the series file to some degree. For
example, adding comments or reordering patches in the unapplied
section of the series file is OK. However, changing the order of
applied patches breaks a number of assumptions and can cause quilt to
produce unexpected or confusing results.
For example, starting from this:
+ patches/01.patch
= patches/02.patch
patches/03.patch
patches/04.patch
and moving the last patch at the beginning of the series file,
"quilt series -v" will print:
+ patches/04.patch
+ patches/01.patch
= patches/02.patch
patches/03.patch
That is, it will claim that 04.patch is applied, while it it not.
Likewise, 04.patch would be listed by neither "quilt applied" nor
"quilt unapplied".
While addressing all such cases would certainly be possible, that
would require a significant amount of work, and would come with
performance penalties. It would also be difficult to be certain that
all issues have been found and addressed. So it seems more reasonable
to simply spot such manual changes to the series file and ask the user
to pop all patches to start from a clean state as needed.
|
| |
|
|
|
|
|
| |
The same test can be implemented using only shell code, saving the
cost of piping to an external command.
|
| |
|
|
|
|
|
|
|
| |
Commit a626fcf8b95f2ff51701a00d65043b9f65207514 (setup: Skip version
check) is insufficient for spec file-based setup commands. inspect
itself also sources patchfns, so it must also skip the version check
explicitly.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The command line interface to tar is complex and sometimes confusing,
but we should still do our best to figure out where the file name is
on that command line.
Add support for the --file FILE and --file=FILE options. Other long
options must be explicitly skipped, as well as short options not
containing the letter "f".
With this we should be good to go in most real-world cases, but
there are still a few corner cases we may not handle properly. Let's
just hope we never hit them.
Reported by Petr Tesarik.
|
|
|
|
|
|
| |
We already have a function to figure out which files are touched by
unapplied patches. The only thing missing to let the user call "quilt
files" on unapplied patches was two small spots of glue.
|
|
|
|
|
| |
Filter out duplicates in filenames_in_patch so that callers don't
have to deal with them.
|
|
|
|
|
| |
Another minor optimization in filenames_in_patch: reorder the field
testing to only test $3 as needed.
|
|
|
|
|
| |
Now that the patches command works with context patches, we can test
that.
|
|
|
|
|
| |
Function filenames_in_patch in patchfns does roughly the same as
function touched_by_patch, so fix the former and use it.
|
|
|
|
|
|
| |
Minor optimizations:
* Drop unneeded quotes
* Drop unneeded pattern capturing
|
|
|
|
|
|
|
|
|
| |
Introduce a helper function checking for availability of a given
external tool. A standard error message is displayed if the required
tool is not available.
Use this helper function in graph, mail and setup, instead of
duplicating the code.
|
|
|
|
|
| |
Use the array_join helper function, it is more readable than bash
magic.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, trying to use the graph subcommand without graphviz being
installed resulted in a cryptic error message:
Can't exec "tred": No such file or directory at /usr/lib/perl/5.14/IO/File.pm line 66, <STDIN> line 1.
graphviz is already in the Suggests field of the debian package, and
we cannot raise this dependency severity given the central role of
quilt in the debian infrastructure. This informative error message is
much more sensible.
Also, merge the error message with the one from quilt mail when
formail is not installed to ease the life of translators.
Fixes Debian bug #659944:
Bug-Debian: http://bugs.debian.org/659944
|
|
|
|
|
| |
Before running inspect on a spec file, verify that rpmbuild is
available. Print a user-friendly error message if not.
|
|
|
|
|
|
|
| |
The version check is irrelevant when running "quilt setup", as it is
creating a brand new working tree anyway.
Reported by Petr Tesarik.
|
|
|
|
|
|
|
|
| |
Commit 48ff26d6 already added a QUILT_COMPAT_PROG_PATH line for cp to
configure.ac, and the corresponding CP variable in Makefile.in. I
don't know how I missed this originally; sorry for the churn!
Signed-off-by: Kent R. Spillner <kspillner@acm.org>
|
|
|
|
|
|
|
|
| |
diff might be called by a different name if the configure script was
invoked with the --with-diff argument. Make the permissions test in
faildiff.test match other names as well.
Signed-off-by: Kent R. Spillner <kspillner@acm.org>
|