- fix Savannah bug #29949
This commit is contained in:
parent
e1f9543c9d
commit
46e433431a
@ -1,4 +1,4 @@
|
|||||||
ChangeLog | 85 ++++++++++++++++++++++++++++++++++++++++++++++
|
ChangeLog | 83 +++++++++++++++++++++++++++++++++++++++++++++
|
||||||
find/defs.h | 14 ++++----
|
find/defs.h | 14 ++++----
|
||||||
find/find.c | 69 +++++--------------------------------
|
find/find.c | 69 +++++--------------------------------
|
||||||
find/finddata.c | 12 +-----
|
find/finddata.c | 12 +-----
|
||||||
@ -10,99 +10,97 @@
|
|||||||
lib/dircallback.c | 36 +++++++++++++++++++-
|
lib/dircallback.c | 36 +++++++++++++++++++-
|
||||||
lib/dircallback.h | 5 ++-
|
lib/dircallback.h | 5 ++-
|
||||||
lib/listfile.c | 2 +-
|
lib/listfile.c | 2 +-
|
||||||
12 files changed, 293 insertions(+), 196 deletions(-)
|
12 files changed, 291 insertions(+), 196 deletions(-)
|
||||||
|
|
||||||
diff --git a/ChangeLog b/ChangeLog
|
diff --git a/ChangeLog b/ChangeLog
|
||||||
index 34552d5..f040627 100644
|
index 34552d5..fefc1b8 100644
|
||||||
--- a/ChangeLog
|
--- a/ChangeLog
|
||||||
+++ b/ChangeLog
|
+++ b/ChangeLog
|
||||||
@@ -1,5 +1,90 @@
|
@@ -1,5 +1,88 @@
|
||||||
2010-04-10 James Youngman <jay@gnu.org>
|
2010-04-10 James Youngman <jay@gnu.org>
|
||||||
|
|
||||||
+ Exec predicates now store which directory they want to run in.
|
+ Exec predicates now store which directory they want to run in.
|
||||||
+ * lib/dircallback.c (run_in_dirfd): New name for old run_in_dir
|
+ * lib/dircallback.c (run_in_dirfd): New name for old run_in_dir
|
||||||
+ function.
|
+ function.
|
||||||
+ (run_in_dir): Like the old function of the same name, but now
|
+ (run_in_dir): Like the old function of the same name, but now
|
||||||
+ takes an argument const struct saved_cwd *.
|
+ takes an argument const struct saved_cwd *.
|
||||||
+ * lib/dircallback.h: Update declarations of run_in_dirfd and
|
+ * lib/dircallback.h: Update declarations of run_in_dirfd and
|
||||||
+ run_in_dir.
|
+ run_in_dir.
|
||||||
+ * find/util.c: Include dircallback.h, xalloc.h, save-cwd.h.
|
+ * find/util.c: Include dircallback.h, xalloc.h, save-cwd.h.
|
||||||
+ (do_complete_pending_execdirs): Remove dir_fd parameter, since the
|
+ (do_complete_pending_execdirs): Remove dir_fd parameter, since the
|
||||||
+ per-predicate data structures now indicate what directory they
|
+ per-predicate data structures now indicate what directory they
|
||||||
+ need to be run in. Instead of calling bc_do_exec directly, use a
|
+ need to be run in. Instead of calling bc_do_exec directly, use a
|
||||||
+ callback 'exec_cb' that uses run_in_dir (which now takes a
|
+ callback 'exec_cb' that uses run_in_dir (which now takes a
|
||||||
+ saved_cwd* parameter instead of a file descriptor).
|
+ saved_cwd* parameter instead of a file descriptor).
|
||||||
+ (do_exec): Called by do_complete_pending_execdirs, and simply uses
|
+ (do_exec): Called by do_complete_pending_execdirs, and simply uses
|
||||||
+ run_in_dir to call exec_cb, restoring the working directory
|
+ run_in_dir to call exec_cb, restoring the working directory
|
||||||
+ afterward.
|
+ afterward.
|
||||||
+ (record_initial_cwd): New function, initialises the global
|
+ (record_initial_cwd): New function, initialises the global
|
||||||
+ variable initial_wd.
|
+ variable initial_wd.
|
||||||
+ (cleanup_initial_cwd): New function, cleans up the global variable
|
+ (cleanup_initial_cwd): New function, cleans up the global variable
|
||||||
+ initial_wd.
|
+ initial_wd.
|
||||||
+ (cleanup): Call cleanup_initial_cwd.
|
+ (cleanup): Call cleanup_initial_cwd.
|
||||||
+ (get_start_dirfd): Remove.
|
+ (get_start_dirfd): Remove.
|
||||||
+ (is_exec_in_local_dir): New function; true for predicates -execdir
|
+ (is_exec_in_local_dir): New function; true for predicates -execdir
|
||||||
+ and -okdir.
|
+ and -okdir.
|
||||||
+ * find/pred.c: Include save-cwd.h.
|
+ * find/pred.c: Include save-cwd.h.
|
||||||
+ (record_exec_dir): New function, sets the value of
|
+ (record_exec_dir): New function, sets the value of
|
||||||
+ execp->wd_for_exec if needed.
|
+ execp->wd_for_exec if needed.
|
||||||
+ (new_impl_pred_exec): Remove the obsolete dir_fd parameter. Call
|
+ (new_impl_pred_exec): Remove the obsolete dir_fd parameter. Call
|
||||||
+ record_exec_dir.
|
+ record_exec_dir.
|
||||||
+ (pred_exec): Don't pass the dir_fd parameter.
|
+ (pred_exec): Don't pass the dir_fd parameter.
|
||||||
+ (pred_execdir): Likewise.
|
+ (pred_execdir): Likewise.
|
||||||
+ (pred_ok): Likewise.
|
+ (pred_ok): Likewise.
|
||||||
+ (pred_okdir): Likewise.
|
+ (pred_okdir): Likewise.
|
||||||
+ (can_access): Call run_in_dirfd rather than run_in_dir (the
|
+ (can_access): Call run_in_dirfd rather than run_in_dir (the
|
||||||
+ function was renamed).
|
+ function was renamed).
|
||||||
+ (prep_child_for_exec): Remove dir_fd parameter; don't fchdir to
|
+ (prep_child_for_exec): Remove dir_fd parameter; don't fchdir to
|
||||||
+ that. Call restore_cwd instead (passing a saved_cwd* parameter
|
+ that. Call restore_cwd instead (passing a saved_cwd* parameter
|
||||||
+ which replaced dir_fd).
|
+ which replaced dir_fd).
|
||||||
+ (launch): Remove references to execp->use_current_dir.
|
+ (launch): Remove references to execp->use_current_dir.
|
||||||
+ (launch): Change references to execp->dir_fd to execp->wd_for_exec.
|
+ (launch): Change references to execp->dir_fd to execp->wd_for_exec.
|
||||||
+ * find/parser.c: Correct indentiation of declaration of
|
+ * find/parser.c: Correct indentiation of declaration of
|
||||||
+ insert_exec_ok and remove the obsolete dir_fd parameter.
|
+ insert_exec_ok and remove the obsolete dir_fd parameter.
|
||||||
+ (parse_exec): Don't pass the dir_fd parameter to insert_exec_ok.
|
+ (parse_exec): Don't pass the dir_fd parameter to insert_exec_ok.
|
||||||
+ (parse_execdir): Likewise.
|
+ (parse_execdir): Likewise.
|
||||||
+ (parse_ok): Likewise.
|
+ (parse_ok): Likewise.
|
||||||
+ (parse_okdir): Likewise.
|
+ (parse_okdir): Likewise.
|
||||||
+ (insert_exec_ok): Remove obsolete dir_fd paramter. Initialise
|
+ (insert_exec_ok): Remove obsolete dir_fd paramter. Initialise
|
||||||
+ execp->wd_for_exec, either to NULL (for -*dir) or to the
|
+ execp->wd_for_exec, either to NULL (for -*dir) or to the
|
||||||
+ initial_wd.
|
+ initial_wd.
|
||||||
+ * find/ftsfind.c: Remove get_current_dirfd. Remove
|
+ * find/ftsfind.c: Remove get_current_dirfd. Remove
|
||||||
+ complete_execdirs_cb.
|
+ complete_execdirs_cb.
|
||||||
+ (consider_visiting): Call complete_pending_execdirs directly.
|
+ (consider_visiting): Call complete_pending_execdirs directly.
|
||||||
+ (main): Call record_initial_cwd to record the initial working
|
+ (main): Call record_initial_cwd to record the initial working
|
||||||
+ directory, early on. Don't initialise starting_dir or
|
+ directory, early on. Don't initialise starting_dir or
|
||||||
+ starting_desc, they have been removed.
|
+ starting_desc, they have been removed.
|
||||||
+ * find/finddata.c: Include save-cwd.h. Remove starting_dir and
|
+ * find/finddata.c: Include save-cwd.h. Remove starting_dir and
|
||||||
+ starting_desc. Add new global variable initial_wd. It is a struct
|
+ starting_desc. Add new global variable initial_wd. It is a struct
|
||||||
+ saved_wd* and represents find's initial working directory.
|
+ saved_wd* and represents find's initial working directory.
|
||||||
+ * find/find.c: Include save-cwd.h.
|
+ * find/find.c: Include save-cwd.h.
|
||||||
+ (main): Call record_initial_cwd in order to initialise the
|
+ (main): Call record_initial_cwd in order to initialise the
|
||||||
+ global variable initial_wd Don't set starting_desc and
|
+ global variable initial_wd Don't set starting_desc and
|
||||||
+ starting_dir, since those variables have been removed.
|
+ starting_dir, since those variables have been removed.
|
||||||
+ (safely_chdir): Don't pass an fd to complete_pending_execdirs.
|
+ (safely_chdir): Don't pass an fd to complete_pending_execdirs.
|
||||||
+ (chdir_back): Remove the safety check (since we are using fchdir
|
+ (chdir_back): Remove the safety check (since we are using fchdir
|
||||||
+ and in any case no longer have all the data that the existing
|
+ and in any case no longer have all the data that the existing
|
||||||
+ wd_sanity_check function wants).
|
+ wd_sanity_check function wants).
|
||||||
+ (do_process_top_dir): Don't pass an fd to
|
+ (do_process_top_dir): Don't pass an fd to
|
||||||
+ complete_pending_execdirs.
|
+ complete_pending_execdirs.
|
||||||
+ (process_dir): Likewise.
|
+ (process_dir): Likewise.
|
||||||
+ * find/defs.h (struct exec_val): Remove use_current_dir and
|
+ * find/defs.h (struct exec_val): Remove use_current_dir and
|
||||||
+ dir_fd. Replace with wd_for_exec, which is a struct saved_wd*.
|
+ dir_fd. Replace with wd_for_exec, which is a struct saved_wd*.
|
||||||
+ (get_start_dirfd): Remove prototype.
|
+ (get_start_dirfd): Remove prototype.
|
||||||
+ (get_current_dirfd): Remove prototype.
|
+ (get_current_dirfd): Remove prototype.
|
||||||
+ (complete_pending_execdirs): No longer takes dir_fd parameter.
|
+ (complete_pending_execdirs): No longer takes dir_fd parameter.
|
||||||
+ (record_initial_cwd): Add prototype.
|
+ (record_initial_cwd): Add prototype.
|
||||||
+ (is_exec_in_local_dir): Add prototype.
|
+ (is_exec_in_local_dir): Add prototype.
|
||||||
+ (options): Declare.
|
+ (options): Declare.
|
||||||
+ (initial_wd): Add declaration. It is a struct saved_wd* and
|
+ (initial_wd): Add declaration. It is a struct saved_wd* and
|
||||||
+ represents find's initial working directory.
|
+ represents find's initial working directory.
|
||||||
+ (starting_dir): Remove declaration of global variable.
|
+ (starting_dir): Remove declaration of global variable.
|
||||||
+ (starting_desc): Remove declaration of global variable.
|
+ (starting_desc): Remove declaration of global variable.
|
||||||
+ * import-gnulib.config (modules): Import module save-cwd.
|
+ * import-gnulib.config (modules): Import module save-cwd.
|
||||||
+
|
|
||||||
+2010-04-10 James Youngman <jay@gnu.org>
|
|
||||||
+
|
+
|
||||||
Add a test which checks $CWD for find -execdir {} +/;
|
Add a test which checks $CWD for find -execdir {} +/;
|
||||||
* find/testsuite/find.gnu/execdir-multiple.exp: New test; verifies
|
* find/testsuite/find.gnu/execdir-multiple.exp: New test; verifies
|
||||||
@ -506,7 +504,7 @@ index 3f237eb..b96d317 100644
|
|||||||
/* Get a timestamp and comparison type.
|
/* Get a timestamp and comparison type.
|
||||||
|
|
||||||
diff --git a/find/pred.c b/find/pred.c
|
diff --git a/find/pred.c b/find/pred.c
|
||||||
index 7c34119..9273bba 100644
|
index 7c34119..d057d48 100644
|
||||||
--- a/find/pred.c
|
--- a/find/pred.c
|
||||||
+++ b/find/pred.c
|
+++ b/find/pred.c
|
||||||
@@ -47,6 +47,7 @@
|
@@ -47,6 +47,7 @@
|
||||||
@ -572,7 +570,7 @@ index 7c34119..9273bba 100644
|
|||||||
+ }
|
+ }
|
||||||
+ else
|
+ else
|
||||||
+ {
|
+ {
|
||||||
+ /* For the others (-exec, -ok), the parder should
|
+ /* For the others (-exec, -ok), the parser should
|
||||||
+ have set wd_for_exec to initial_wd, indicating
|
+ have set wd_for_exec to initial_wd, indicating
|
||||||
+ that the exec should take place from find's initial
|
+ that the exec should take place from find's initial
|
||||||
+ working directory.
|
+ working directory.
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
ChangeLog | 10 ++++++++++
|
ChangeLog | 10 ++++++++++
|
||||||
NEWS | 13 +++++++++++++
|
NEWS | 15 +++++++++++++++
|
||||||
find/ftsfind.c | 37 +++++++++++++++++++------------------
|
find/ftsfind.c | 37 +++++++++++++++++++------------------
|
||||||
3 files changed, 42 insertions(+), 18 deletions(-)
|
3 files changed, 44 insertions(+), 18 deletions(-)
|
||||||
|
|
||||||
diff --git a/ChangeLog b/ChangeLog
|
diff --git a/ChangeLog b/ChangeLog
|
||||||
index 555caab..26d4be3 100644
|
index fefc1b8..98d7962 100644
|
||||||
--- a/ChangeLog
|
--- a/ChangeLog
|
||||||
+++ b/ChangeLog
|
+++ b/ChangeLog
|
||||||
@@ -1,5 +1,15 @@
|
@@ -1,5 +1,15 @@
|
||||||
@ -20,14 +20,18 @@ index 555caab..26d4be3 100644
|
|||||||
+ before we've finished with the current directory).
|
+ before we've finished with the current directory).
|
||||||
+ * NEWS: Mention this change.
|
+ * NEWS: Mention this change.
|
||||||
+
|
+
|
||||||
Exec predicates now store which directory they want to run in.
|
Exec predicates now store which directory they want to run in.
|
||||||
* lib/dircallback.c (run_in_dirfd): New name for old run_in_dir
|
* lib/dircallback.c (run_in_dirfd): New name for old run_in_dir
|
||||||
function.
|
function.
|
||||||
diff --git a/NEWS b/NEWS
|
diff --git a/NEWS b/NEWS
|
||||||
index 6b8b725..757ffd8 100644
|
index 6b8b725..569ff51 100644
|
||||||
--- a/NEWS
|
--- a/NEWS
|
||||||
+++ b/NEWS
|
+++ b/NEWS
|
||||||
@@ -1,3 +1,16 @@
|
@@ -1,5 +1,20 @@
|
||||||
|
GNU findutils NEWS - User visible changes. -*- outline -*- (allout)
|
||||||
|
|
||||||
|
+* Major changes in release 4.4.3-git, YYYY-MM-DD
|
||||||
|
+
|
||||||
+** Bug Fixes
|
+** Bug Fixes
|
||||||
+
|
+
|
||||||
+#19593: -execdir .... {} + has suboptimal performance (see below)
|
+#19593: -execdir .... {} + has suboptimal performance (see below)
|
||||||
@ -41,9 +45,9 @@ index 6b8b725..757ffd8 100644
|
|||||||
+arguments, since an exec will occur each time find encounters a
|
+arguments, since an exec will occur each time find encounters a
|
||||||
+subdirectory (if at least one argument is pending).
|
+subdirectory (if at least one argument is pending).
|
||||||
+
|
+
|
||||||
GNU findutils NEWS - User visible changes. -*- outline -*- (allout)
|
|
||||||
|
|
||||||
* Major changes in release 4.4.2, 2009-11-26
|
* Major changes in release 4.4.2, 2009-11-26
|
||||||
|
|
||||||
|
** Functional Enhancements to find
|
||||||
diff --git a/find/ftsfind.c b/find/ftsfind.c
|
diff --git a/find/ftsfind.c b/find/ftsfind.c
|
||||||
index 9945abd..3c9ae1d 100644
|
index 9945abd..3c9ae1d 100644
|
||||||
--- a/find/ftsfind.c
|
--- a/find/ftsfind.c
|
||||||
|
@ -1,18 +1,19 @@
|
|||||||
ChangeLog | 20 +++++++++
|
ChangeLog | 21 +++++++++
|
||||||
NEWS | 2 +
|
NEWS | 2 +
|
||||||
find/pred.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
|
find/pred.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
|
||||||
3 files changed, 132 insertions(+), 25 deletions(-)
|
3 files changed, 132 insertions(+), 24 deletions(-)
|
||||||
|
|
||||||
diff --git a/ChangeLog b/ChangeLog
|
diff --git a/ChangeLog b/ChangeLog
|
||||||
index b6a0c6c..e796142 100644
|
index 98d7962..8e5d0ce 100644
|
||||||
--- a/ChangeLog
|
--- a/ChangeLog
|
||||||
+++ b/ChangeLog
|
+++ b/ChangeLog
|
||||||
@@ -1,3 +1,23 @@
|
@@ -1,3 +1,24 @@
|
||||||
+2010-04-11 James Youngman <jay@gnu.org>
|
+2010-04-11 James Youngman <jay@gnu.org>
|
||||||
+
|
+
|
||||||
+ Fix Savannah bug #27563, -L breaks -execdir.
|
+ Fix Savannah bug #27563, -L breaks -execdir.
|
||||||
+ * find/pred.c (initialise_wd_for_exec): New function, factoring
|
+ * find/pred.c (mdir_name): New function, taken from newer gnulib.
|
||||||
+ out part of the body of record_exec_dir.
|
+ (initialise_wd_for_exec): New function, factoring out part of the body
|
||||||
|
+ of record_exec_dir.
|
||||||
+ (record_exec_dir): If state.rel_pathname contains a /, extract the
|
+ (record_exec_dir): If state.rel_pathname contains a /, extract the
|
||||||
+ directory part and initialise execp->wd_for_exec to point at that
|
+ directory part and initialise execp->wd_for_exec to point at that
|
||||||
+ directory.
|
+ directory.
|
||||||
@ -32,10 +33,11 @@ index b6a0c6c..e796142 100644
|
|||||||
|
|
||||||
Fix Savannah bug #19593, -execdir .... {} + has suboptimal performance
|
Fix Savannah bug #19593, -execdir .... {} + has suboptimal performance
|
||||||
diff --git a/NEWS b/NEWS
|
diff --git a/NEWS b/NEWS
|
||||||
index 4dcffa7..7f972eb 100644
|
index 569ff51..c8eb0bc 100644
|
||||||
--- a/NEWS
|
--- a/NEWS
|
||||||
+++ b/NEWS
|
+++ b/NEWS
|
||||||
@@ -1,5 +1,7 @@
|
@@ -4,6 +4,8 @@ GNU findutils NEWS - User visible changes. -*- outline -*- (allout)
|
||||||
|
|
||||||
** Bug Fixes
|
** Bug Fixes
|
||||||
|
|
||||||
+#27563: -L breaks -execdir
|
+#27563: -L breaks -execdir
|
||||||
@ -44,7 +46,7 @@ index 4dcffa7..7f972eb 100644
|
|||||||
|
|
||||||
** Performance changes
|
** Performance changes
|
||||||
diff --git a/find/pred.c b/find/pred.c
|
diff --git a/find/pred.c b/find/pred.c
|
||||||
index 9273bba..cf25184 100644
|
index d057d48..cf25184 100644
|
||||||
--- a/find/pred.c
|
--- a/find/pred.c
|
||||||
+++ b/find/pred.c
|
+++ b/find/pred.c
|
||||||
@@ -504,6 +504,57 @@ pred_empty (const char *pathname, struct stat *stat_buf, struct predicate *pred_
|
@@ -504,6 +504,57 @@ pred_empty (const char *pathname, struct stat *stat_buf, struct predicate *pred_
|
||||||
@ -164,7 +166,7 @@ index 9273bba..cf25184 100644
|
|||||||
{
|
{
|
||||||
/* For -execdir/-okdir predicates, the parser did not fill in
|
/* For -execdir/-okdir predicates, the parser did not fill in
|
||||||
the wd_for_exec member of sturct exec_val. So for those
|
the wd_for_exec member of sturct exec_val. So for those
|
||||||
@@ -550,15 +618,30 @@ new_impl_pred_exec (const char *pathname,
|
@@ -550,6 +618,18 @@ new_impl_pred_exec (const char *pathname,
|
||||||
safely_quote_err_filename (0, pathname));
|
safely_quote_err_filename (0, pathname));
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
@ -183,10 +185,7 @@ index 9273bba..cf25184 100644
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
- /* For the others (-exec, -ok), the parder should
|
@@ -559,6 +639,9 @@ new_impl_pred_exec (const char *pathname,
|
||||||
+ /* For the others (-exec, -ok), the parser should
|
|
||||||
have set wd_for_exec to initial_wd, indicating
|
|
||||||
that the exec should take place from find's initial
|
|
||||||
working directory.
|
working directory.
|
||||||
*/
|
*/
|
||||||
assert (execp->wd_for_exec == initial_wd);
|
assert (execp->wd_for_exec == initial_wd);
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
ChangeLog | 13 +++++++++++++
|
ChangeLog | 11 +++++++++++
|
||||||
find/testsuite/Makefile.am | 4 ++++
|
find/testsuite/Makefile.am | 4 ++++
|
||||||
find/testsuite/find.gnu/sv-bug-27563-execdir.exp | 6 ++++++
|
find/testsuite/find.gnu/sv-bug-27563-execdir.exp | 6 ++++++
|
||||||
find/testsuite/find.gnu/sv-bug-27563-execdir.xo | 1 +
|
find/testsuite/find.gnu/sv-bug-27563-execdir.xo | 1 +
|
||||||
find/testsuite/find.posix/sv-bug-27563-exec.exp | 6 ++++++
|
find/testsuite/find.posix/sv-bug-27563-exec.exp | 6 ++++++
|
||||||
find/testsuite/find.posix/sv-bug-27563-exec.xo | 1 +
|
find/testsuite/find.posix/sv-bug-27563-exec.xo | 1 +
|
||||||
6 files changed, 31 insertions(+), 0 deletions(-)
|
6 files changed, 29 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
diff --git a/ChangeLog b/ChangeLog
|
diff --git a/ChangeLog b/ChangeLog
|
||||||
index e796142..f42aa7a 100644
|
index 8e5d0ce..5702e66 100644
|
||||||
--- a/ChangeLog
|
--- a/ChangeLog
|
||||||
+++ b/ChangeLog
|
+++ b/ChangeLog
|
||||||
@@ -1,5 +1,18 @@
|
@@ -1,5 +1,16 @@
|
||||||
2010-04-11 James Youngman <jay@gnu.org>
|
2010-04-11 James Youngman <jay@gnu.org>
|
||||||
|
|
||||||
+ Add a test case for Savannah bug 27563 (-L breaks -execdir).
|
+ Add a test case for Savannah bug 27563 (-L breaks -execdir).
|
||||||
@ -23,14 +23,12 @@ index e796142..f42aa7a 100644
|
|||||||
+ * find/testsuite/find.posix/sv-bug-27563-exec.exp: New test.
|
+ * find/testsuite/find.posix/sv-bug-27563-exec.exp: New test.
|
||||||
+ * find/testsuite/find.gnu/sv-bug-27563-execdir.xo: Expected output.
|
+ * find/testsuite/find.gnu/sv-bug-27563-execdir.xo: Expected output.
|
||||||
+ * find/testsuite/find.posix/sv-bug-27563-exec.xo: Expected output.
|
+ * find/testsuite/find.posix/sv-bug-27563-exec.xo: Expected output.
|
||||||
+
|
|
||||||
+2010-04-11 James Youngman <jay@gnu.org>
|
|
||||||
+
|
+
|
||||||
Fix Savannah bug #27563, -L breaks -execdir.
|
Fix Savannah bug #27563, -L breaks -execdir.
|
||||||
* find/pred.c (initialise_wd_for_exec): New function, factoring
|
* find/pred.c (mdir_name): New function, taken from newer gnulib.
|
||||||
out part of the body of record_exec_dir.
|
(initialise_wd_for_exec): New function, factoring out part of the body
|
||||||
diff --git a/find/testsuite/Makefile.am b/find/testsuite/Makefile.am
|
diff --git a/find/testsuite/Makefile.am b/find/testsuite/Makefile.am
|
||||||
index 1447132..2e661d9 100644
|
index 1447132..aa32d4b 100644
|
||||||
--- a/find/testsuite/Makefile.am
|
--- a/find/testsuite/Makefile.am
|
||||||
+++ b/find/testsuite/Makefile.am
|
+++ b/find/testsuite/Makefile.am
|
||||||
@@ -63,6 +63,7 @@ find.gnu/samefile-same.xo \
|
@@ -63,6 +63,7 @@ find.gnu/samefile-same.xo \
|
||||||
@ -53,7 +51,7 @@ index 1447132..2e661d9 100644
|
|||||||
find.gnu/sv-bug-17782.exp \
|
find.gnu/sv-bug-17782.exp \
|
||||||
find.gnu/sv-bug-18222.exp \
|
find.gnu/sv-bug-18222.exp \
|
||||||
find.gnu/sv-bug-24169.exp \
|
find.gnu/sv-bug-24169.exp \
|
||||||
+find.gnu/sv-bug-25359-execdir.exp \
|
+find.gnu/sv-bug-27563-execdir.exp \
|
||||||
find.gnu/quit.exp \
|
find.gnu/quit.exp \
|
||||||
find.gnu/used-invarg.exp \
|
find.gnu/used-invarg.exp \
|
||||||
find.gnu/used-missing.exp \
|
find.gnu/used-missing.exp \
|
||||||
@ -61,7 +59,7 @@ index 1447132..2e661d9 100644
|
|||||||
find.posix/mtime0.exp \
|
find.posix/mtime0.exp \
|
||||||
find.posix/sv-bug-11175.exp \
|
find.posix/sv-bug-11175.exp \
|
||||||
find.posix/sv-bug-12181.exp \
|
find.posix/sv-bug-12181.exp \
|
||||||
+find.posix/sv-bug-25359-exec.exp \
|
+find.posix/sv-bug-27563-exec.exp \
|
||||||
find.posix/depth1.exp \
|
find.posix/depth1.exp \
|
||||||
find.posix/sizes.exp \
|
find.posix/sizes.exp \
|
||||||
find.posix/name.exp \
|
find.posix/name.exp \
|
||||||
|
70
findutils-4.5.8-0006-Fix-Savannah-bug-29949.patch
Normal file
70
findutils-4.5.8-0006-Fix-Savannah-bug-29949.patch
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
ChangeLog | 9 +++++++++
|
||||||
|
NEWS | 2 ++
|
||||||
|
find/pred.c | 10 ++++------
|
||||||
|
find/testsuite/find.gnu/execdir-multiple.exp | 1 +
|
||||||
|
4 files changed, 16 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ChangeLog b/ChangeLog
|
||||||
|
index 5702e66..97b1b7c 100644
|
||||||
|
--- a/ChangeLog
|
||||||
|
+++ b/ChangeLog
|
||||||
|
@@ -1,3 +1,12 @@
|
||||||
|
+2010-05-24 Kamil Dudka <kdudka@redhat.com>
|
||||||
|
+
|
||||||
|
+ Fix Savannah bug #29949, -execdir does not change working directory
|
||||||
|
+ * find/pred.c (record_exec_dir): Do not throw the execdir when not
|
||||||
|
+ working in the cumulative mode.
|
||||||
|
+ * find/testsuite/find.gnu/execdir-multiple.exp: Add a test-case for
|
||||||
|
+ the bug #29949.
|
||||||
|
+ * NEWS: Mention this bugfix.
|
||||||
|
+
|
||||||
|
2010-04-11 James Youngman <jay@gnu.org>
|
||||||
|
|
||||||
|
Add a test case for Savannah bug 27563 (-L breaks -execdir).
|
||||||
|
diff --git a/NEWS b/NEWS
|
||||||
|
index c8eb0bc..2ba2111 100644
|
||||||
|
--- a/NEWS
|
||||||
|
+++ b/NEWS
|
||||||
|
@@ -4,6 +4,8 @@ GNU findutils NEWS - User visible changes. -*- outline -*- (allout)
|
||||||
|
|
||||||
|
** Bug Fixes
|
||||||
|
|
||||||
|
+#29949: find -execdir does not change working directory
|
||||||
|
+
|
||||||
|
#27563: -L breaks -execdir
|
||||||
|
|
||||||
|
#19593: -execdir .... {} + has suboptimal performance (see below)
|
||||||
|
diff --git a/find/pred.c b/find/pred.c
|
||||||
|
index cf25184..cac74d1 100644
|
||||||
|
--- a/find/pred.c
|
||||||
|
+++ b/find/pred.c
|
||||||
|
@@ -558,13 +558,11 @@ initialise_wd_for_exec (struct exec_val *execp, int cwd_fd, const char *dir)
|
||||||
|
static boolean
|
||||||
|
record_exec_dir (struct exec_val *execp)
|
||||||
|
{
|
||||||
|
- if (!execp->wd_for_exec)
|
||||||
|
+ /* working directory not already known, so must be a *dir variant,
|
||||||
|
+ and this must be the first arg we added. However, this may
|
||||||
|
+ be -execdir foo {} \; (i.e. not multiple). */
|
||||||
|
+ if (!execp->state.todo)
|
||||||
|
{
|
||||||
|
- /* working directory not already known, so must be a *dir variant,
|
||||||
|
- and this must be the first arg we added. However, this may
|
||||||
|
- be -execdir foo {} \; (i.e. not multiple). */
|
||||||
|
- assert (!execp->state.todo);
|
||||||
|
-
|
||||||
|
/* Record the WD. If we're using -L or fts chooses to do so for
|
||||||
|
any other reason, state.cwd_dir_fd may in fact not be the
|
||||||
|
directory containing the target file. When this happens,
|
||||||
|
diff --git a/find/testsuite/find.gnu/execdir-multiple.exp b/find/testsuite/find.gnu/execdir-multiple.exp
|
||||||
|
index 6d4bd66..495b93b 100644
|
||||||
|
--- a/find/testsuite/find.gnu/execdir-multiple.exp
|
||||||
|
+++ b/find/testsuite/find.gnu/execdir-multiple.exp
|
||||||
|
@@ -49,6 +49,7 @@ if { [ safe_path ] } {
|
||||||
|
}
|
||||||
|
|
||||||
|
set SKIP_OLD 1
|
||||||
|
+ find_start p {tmp -type f -empty -execdir sh ./runme \{\} \; } ""
|
||||||
|
find_start p {tmp -type f -empty -execdir sh ./runme \{\} + } ""
|
||||||
|
set SKIP_OLD 0
|
||||||
|
exec rm -rf tmp
|
@ -1,7 +1,7 @@
|
|||||||
Summary: The GNU versions of find utilities (find and xargs)
|
Summary: The GNU versions of find utilities (find and xargs)
|
||||||
Name: findutils
|
Name: findutils
|
||||||
Version: 4.4.2
|
Version: 4.4.2
|
||||||
Release: 7%{?dist}
|
Release: 8%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
Group: Applications/File
|
Group: Applications/File
|
||||||
@ -45,6 +45,9 @@ Patch10: findutils-4.5.8-0004-e1d0a99.patch
|
|||||||
# backport of upstream commit a1f54022d1913a92ccb728211127d5c238397eb6
|
# backport of upstream commit a1f54022d1913a92ccb728211127d5c238397eb6
|
||||||
Patch11: findutils-4.5.8-0005-a1f5402.patch
|
Patch11: findutils-4.5.8-0005-a1f5402.patch
|
||||||
|
|
||||||
|
# Fix Savannah bug #29949, -execdir does not change working directory
|
||||||
|
Patch12: findutils-4.5.8-0006-Fix-Savannah-bug-29949.patch
|
||||||
|
|
||||||
Requires(post): /sbin/install-info
|
Requires(post): /sbin/install-info
|
||||||
Requires(preun): /sbin/install-info
|
Requires(preun): /sbin/install-info
|
||||||
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
@ -76,6 +79,7 @@ useful for finding things on your system.
|
|||||||
%patch9 -p1
|
%patch9 -p1
|
||||||
%patch10 -p1
|
%patch10 -p1
|
||||||
%patch11 -p1
|
%patch11 -p1
|
||||||
|
%patch12 -p1
|
||||||
|
|
||||||
autoreconf
|
autoreconf
|
||||||
|
|
||||||
@ -133,6 +137,9 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%{_infodir}/find-maint.info.gz
|
%{_infodir}/find-maint.info.gz
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Jun 01 2010 Kamil Dudka <kdudka@redhat.com> - 1:4.4.2-8
|
||||||
|
- fix Savannah bug #29949
|
||||||
|
|
||||||
* Mon May 10 2010 Kamil Dudka <kdudka@redhat.com> - 1:4.4.2-7
|
* Mon May 10 2010 Kamil Dudka <kdudka@redhat.com> - 1:4.4.2-7
|
||||||
- backport of patches for upstream bugs #19593 and #27563 (rhbz #493143)
|
- backport of patches for upstream bugs #19593 and #27563 (rhbz #493143)
|
||||||
- mention -xautofs in the output of --help (#590166)
|
- mention -xautofs in the output of --help (#590166)
|
||||||
|
Loading…
Reference in New Issue
Block a user