How's this patch? Are the name and description of the function good?
Should any of the other dozen or so tests of "->absent" and/or "->deleted" in
the WC library be using this function? There are a few that look suspicious,
but I'm not sure what they are trying to do exactly.
In subversion/libsvn_wc/adm_crawler.c (report_revisions):237:
/* If the entry is 'deleted' or 'absent', make sure the server
knows it's gone... */
if (current_entry->deleted || current_entry->absent)
{
/* ...unless we're reporting everything, in which case it's already
missing on the server. */
if (! report_everything)
SVN_ERR (reporter->delete_path (report_baton, this_path, iterpool));
continue;
}
In subversion/libsvn_wc/adm_ops.c (tweak_entries):113:
/* If a file, or deleted or absent dir in recursive mode, then tweak the
entry but don't recurse. */
if ((current_entry->kind == svn_node_file)
|| (recurse && (current_entry->deleted || current_entry->absent)))
{
SVN_ERR (svn_wc__tweak_entry (entries, name, ...
}
In subversion/libsvn_wc/adm_ops.c (svn_wc__do_update_cleanup):228:
if (entry->kind == svn_node_file
|| (entry->kind == svn_node_dir && (entry->deleted || entry->absent)))
{
...do stuff...
}
- Julian
Factor out tests for whether a WC entry is present locally.
The main reason for doing this is because the exact test to use is rather
obscure, as the redundant condition in some of the tests being replaced
shows. (A "deleted" or "absent" item can never have schedule "replace".)
* subversion/libsvn_wc/entries.h
* subversion/libsvn_wc/entries.c
(svn_wc__entry_present_locally): New function.
* subversion/libsvn_wc/entries.c (handle_start_tag):
* subversion/libsvn_wc/lock.c (prune_deleted):
* subversion/libsvn_wc/relocate.c (svn_wc_relocate2):
Use it.
Index: subversion/libsvn_wc/relocate.c
===================================================================
--- subversion/libsvn_wc/relocate.c (revision 17457)
+++ subversion/libsvn_wc/relocate.c (working copy)
@@ -159,8 +159,7 @@
continue;
if (recurse && (entry->kind == svn_node_dir)
- && (! entry->deleted || (entry->schedule == svn_wc_schedule_add))
- && ! entry->absent)
+ && svn_wc__entry_present_locally (entry))
{
svn_wc_adm_access_t *subdir_access;
const char *subdir = svn_path_join (path, key, pool);
Index: subversion/libsvn_wc/entries.c
===================================================================
--- subversion/libsvn_wc/entries.c (revision 17457)
+++ subversion/libsvn_wc/entries.c (working copy)
@@ -533,15 +533,8 @@
/* Find the name and set up the entry under that name. This
should *NOT* be NULL, since svn_wc__atts_to_entry() should
- have made it into SVN_WC_ENTRY_THIS_DIR. (Note that technically,
- an entry can't be both absent and scheduled for addition, but we
- don't need a sanity check for that here.) */
- if ((entry->deleted || entry->absent)
- && (entry->schedule != svn_wc_schedule_add)
- && (entry->schedule != svn_wc_schedule_replace)
- && (! accum->show_hidden))
- ;
- else
+ have made it into SVN_WC_ENTRY_THIS_DIR. */
+ if (svn_wc__entry_present_locally (entry) || accum->show_hidden)
apr_hash_set (accum->entries, entry->name, APR_HASH_KEY_STRING, entry);
}
@@ -2029,3 +2022,11 @@
"path is marked 'missing'"),
svn_path_local_style (path, pool));
}
+
+
+svn_boolean_t
+svn_wc__entry_present_locally (const svn_wc_entry_t *entry)
+{
+ return (! entry->deleted && ! entry->absent)
+ || (entry->schedule == svn_wc_schedule_add);
+}
Index: subversion/libsvn_wc/entries.h
===================================================================
--- subversion/libsvn_wc/entries.h (revision 17457)
+++ subversion/libsvn_wc/entries.h (working copy)
@@ -211,6 +211,12 @@
apr_pool_t *pool);
+/* Return true iff @a entry indicates an item that is present in the WC
+ * (as opposed to being "absent" or "deleted" and not recreated). */
+svn_boolean_t
+svn_wc__entry_present_locally (const svn_wc_entry_t *entry);
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Index: subversion/libsvn_wc/lock.c
===================================================================
--- subversion/libsvn_wc/lock.c (revision 17457)
+++ subversion/libsvn_wc/lock.c (working copy)
@@ -28,6 +28,7 @@
#include "adm_files.h"
#include "lock.h"
#include "questions.h"
+#include "entries.h"
#include "svn_private_config.h"
@@ -1250,10 +1251,7 @@
const svn_wc_entry_t *entry;
apr_hash_this (hi, NULL, NULL, &val);
entry = val;
- if ((entry->deleted
- && (entry->schedule != svn_wc_schedule_add)
- && (entry->schedule != svn_wc_schedule_replace))
- || entry->absent)
+ if (! svn_wc__entry_present_locally (entry))
break;
}
@@ -1276,9 +1274,7 @@
apr_hash_this (hi, &key, NULL, &val);
entry = val;
- if (((entry->deleted == FALSE) && (entry->absent == FALSE))
- || (entry->schedule == svn_wc_schedule_add)
- || (entry->schedule == svn_wc_schedule_replace))
+ if (svn_wc__entry_present_locally (entry))
{
apr_hash_set (adm_access->entries, key,
APR_HASH_KEY_STRING, entry);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sun Nov 27 02:00:45 2005