📄 entries.c
字号:
} /* Is this entry copied? */ SVN_ERR(read_bool(&entry->copied, SVN_WC__ENTRY_ATTR_COPIED, buf, end)); MAYBE_DONE; SVN_ERR(read_str(&entry->copyfrom_url, buf, end, pool)); MAYBE_DONE; SVN_ERR(read_revnum(&entry->copyfrom_rev, buf, end, pool)); MAYBE_DONE; /* Is this entry deleted? */ SVN_ERR(read_bool(&entry->deleted, SVN_WC__ENTRY_ATTR_DELETED, buf, end)); MAYBE_DONE; /* Is this entry absent? */ SVN_ERR(read_bool(&entry->absent, SVN_WC__ENTRY_ATTR_ABSENT, buf, end)); MAYBE_DONE; /* Is this entry incomplete? */ SVN_ERR(read_bool(&entry->incomplete, SVN_WC__ENTRY_ATTR_INCOMPLETE, buf, end)); MAYBE_DONE; /* UUID. */ SVN_ERR(read_str(&entry->uuid, buf, end, pool)); MAYBE_DONE; /* Lock token. */ SVN_ERR(read_str(&entry->lock_token, buf, end, pool)); MAYBE_DONE; /* Lock owner. */ SVN_ERR(read_str(&entry->lock_owner, buf, end, pool)); MAYBE_DONE; /* Lock comment. */ SVN_ERR(read_str(&entry->lock_comment, buf, end, pool)); MAYBE_DONE; /* Lock creation date. */ SVN_ERR(read_time(&entry->lock_creation_date, buf, end, pool)); done:; *new_entry = entry; return SVN_NO_ERROR;}svn_error_t *svn_wc__atts_to_entry(svn_wc_entry_t **new_entry, apr_uint32_t *modify_flags, apr_hash_t *atts, apr_pool_t *pool){ svn_wc_entry_t *entry = alloc_entry(pool); const char *name; *modify_flags = 0; /* Find the name and set up the entry under that name. */ name = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_NAME, APR_HASH_KEY_STRING); /* XXX Replace the obsolete "svn:this_dir". XXX This code should go away by 1.0 */ { if (name && strcmp(name, "svn:this_dir") == 0) name = SVN_WC_ENTRY_THIS_DIR; } entry->name = name ? apr_pstrdup(pool, name) : SVN_WC_ENTRY_THIS_DIR; /* Attempt to set revision (resolve_to_defaults may do it later, too) */ { const char *revision_str = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_REVISION, APR_HASH_KEY_STRING); if (revision_str) { entry->revision = SVN_STR_TO_REV(revision_str); *modify_flags |= SVN_WC__ENTRY_MODIFY_REVISION; } else entry->revision = SVN_INVALID_REVNUM; } /* Attempt to set up url path (again, see resolve_to_defaults). */ { entry->url = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_URL, APR_HASH_KEY_STRING); if (entry->url) { *modify_flags |= SVN_WC__ENTRY_MODIFY_URL; entry->url = apr_pstrdup(pool, entry->url); } } /* Set up repository root. Make sure it is a prefix of url. */ { entry->repos = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_REPOS, APR_HASH_KEY_STRING); if (entry->repos) { if (entry->url && ! svn_path_is_ancestor(entry->repos, entry->url)) return svn_error_createf(SVN_ERR_WC_CORRUPT, NULL, _("Entry for '%s' has invalid repository " "root"), name ? name : SVN_WC_ENTRY_THIS_DIR); *modify_flags |= SVN_WC__ENTRY_MODIFY_REPOS; entry->repos = apr_pstrdup(pool, entry->repos); } } /* Set up kind. */ { const char *kindstr = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_KIND, APR_HASH_KEY_STRING); entry->kind = svn_node_none; if (kindstr) { if (! strcmp(kindstr, SVN_WC__ENTRIES_ATTR_FILE_STR)) entry->kind = svn_node_file; else if (! strcmp(kindstr, SVN_WC__ENTRIES_ATTR_DIR_STR)) entry->kind = svn_node_dir; else return svn_error_createf (SVN_ERR_NODE_UNKNOWN_KIND, NULL, _("Entry '%s' has invalid node kind"), (name ? name : SVN_WC_ENTRY_THIS_DIR)); *modify_flags |= SVN_WC__ENTRY_MODIFY_KIND; } } /* Look for a schedule attribute on this entry. */ { const char *schedulestr = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_SCHEDULE, APR_HASH_KEY_STRING); entry->schedule = svn_wc_schedule_normal; if (schedulestr) { if (! strcmp(schedulestr, SVN_WC__ENTRY_VALUE_ADD)) entry->schedule = svn_wc_schedule_add; else if (! strcmp(schedulestr, SVN_WC__ENTRY_VALUE_DELETE)) entry->schedule = svn_wc_schedule_delete; else if (! strcmp(schedulestr, SVN_WC__ENTRY_VALUE_REPLACE)) entry->schedule = svn_wc_schedule_replace; else if (! strcmp(schedulestr, "")) entry->schedule = svn_wc_schedule_normal; else return svn_error_createf (SVN_ERR_ENTRY_ATTRIBUTE_INVALID, NULL, _("Entry '%s' has invalid '%s' value"), (name ? name : SVN_WC_ENTRY_THIS_DIR), SVN_WC__ENTRY_ATTR_SCHEDULE); *modify_flags |= SVN_WC__ENTRY_MODIFY_SCHEDULE; } } /* Is this entry in a state of mental torment (conflict)? */ { if ((entry->prejfile = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_PREJFILE, APR_HASH_KEY_STRING))) { *modify_flags |= SVN_WC__ENTRY_MODIFY_PREJFILE; /* Normalize "" (used by the log runner) to NULL */ entry->prejfile = *(entry->prejfile) ? apr_pstrdup(pool, entry->prejfile) : NULL; } if ((entry->conflict_old = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_CONFLICT_OLD, APR_HASH_KEY_STRING))) { *modify_flags |= SVN_WC__ENTRY_MODIFY_CONFLICT_OLD; /* Normalize "" (used by the log runner) to NULL */ entry->conflict_old = *(entry->conflict_old) ? apr_pstrdup(pool, entry->conflict_old) : NULL; } if ((entry->conflict_new = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_CONFLICT_NEW, APR_HASH_KEY_STRING))) { *modify_flags |= SVN_WC__ENTRY_MODIFY_CONFLICT_NEW; /* Normalize "" (used by the log runner) to NULL */ entry->conflict_new = *(entry->conflict_new) ? apr_pstrdup(pool, entry->conflict_new) : NULL; } if ((entry->conflict_wrk = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_CONFLICT_WRK, APR_HASH_KEY_STRING))) { *modify_flags |= SVN_WC__ENTRY_MODIFY_CONFLICT_WRK; /* Normalize "" (used by the log runner) to NULL */ entry->conflict_wrk = *(entry->conflict_wrk) ? apr_pstrdup(pool, entry->conflict_wrk) : NULL; } } /* Is this entry copied? */ SVN_ERR(do_bool_attr(&entry->copied, modify_flags, SVN_WC__ENTRY_MODIFY_COPIED, atts, SVN_WC__ENTRY_ATTR_COPIED, name)); { const char *revstr; entry->copyfrom_url = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_COPYFROM_URL, APR_HASH_KEY_STRING); if (entry->copyfrom_url) { *modify_flags |= SVN_WC__ENTRY_MODIFY_COPYFROM_URL; entry->copyfrom_url = apr_pstrdup(pool, entry->copyfrom_url); } revstr = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_COPYFROM_REV, APR_HASH_KEY_STRING); if (revstr) { entry->copyfrom_rev = SVN_STR_TO_REV(revstr); *modify_flags |= SVN_WC__ENTRY_MODIFY_COPYFROM_REV; } } /* Is this entry deleted? */ SVN_ERR(do_bool_attr(&entry->deleted, modify_flags, SVN_WC__ENTRY_MODIFY_DELETED, atts, SVN_WC__ENTRY_ATTR_DELETED, name)); /* Is this entry absent? */ SVN_ERR(do_bool_attr(&entry->absent, modify_flags, SVN_WC__ENTRY_MODIFY_ABSENT, atts, SVN_WC__ENTRY_ATTR_ABSENT, name)); /* Is this entry incomplete? */ SVN_ERR(do_bool_attr(&entry->incomplete, modify_flags, SVN_WC__ENTRY_MODIFY_INCOMPLETE, atts, SVN_WC__ENTRY_ATTR_INCOMPLETE, name)); /* Attempt to set up timestamps. */ { const char *text_timestr, *prop_timestr; text_timestr = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_TEXT_TIME, APR_HASH_KEY_STRING); if (text_timestr) { if (! strcmp(text_timestr, SVN_WC__TIMESTAMP_WC)) { /* Special case: a magic string that means 'get this value from the working copy' -- we ignore it here, trusting that the caller of this function know what to do about it. */ } else SVN_ERR(svn_time_from_cstring(&entry->text_time, text_timestr, pool)); *modify_flags |= SVN_WC__ENTRY_MODIFY_TEXT_TIME; } prop_timestr = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_PROP_TIME, APR_HASH_KEY_STRING); if (prop_timestr) { if (! strcmp(prop_timestr, SVN_WC__TIMESTAMP_WC)) { /* Special case: a magic string that means 'get this value from the working copy' -- we ignore it here, trusting that the caller of this function know what to do about it. */ } else SVN_ERR(svn_time_from_cstring(&entry->prop_time, prop_timestr, pool)); *modify_flags |= SVN_WC__ENTRY_MODIFY_PROP_TIME; } } /* Checksum. */ { entry->checksum = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_CHECKSUM, APR_HASH_KEY_STRING); if (entry->checksum) { *modify_flags |= SVN_WC__ENTRY_MODIFY_CHECKSUM; entry->checksum = apr_pstrdup(pool, entry->checksum); } } /* UUID. */ { entry->uuid = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_UUID, APR_HASH_KEY_STRING); if (entry->uuid) { *modify_flags |= SVN_WC__ENTRY_MODIFY_UUID; entry->uuid = apr_pstrdup(pool, entry->uuid); } } /* Setup last-committed values. */ { const char *cmt_datestr, *cmt_revstr; cmt_datestr = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_CMT_DATE, APR_HASH_KEY_STRING); if (cmt_datestr) { SVN_ERR(svn_time_from_cstring(&entry->cmt_date, cmt_datestr, pool)); *modify_flags |= SVN_WC__ENTRY_MODIFY_CMT_DATE; } else entry->cmt_date = 0; cmt_revstr = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_CMT_REV, APR_HASH_KEY_STRING); if (cmt_revstr) { entry->cmt_rev = SVN_STR_TO_REV(cmt_revstr); *modify_flags |= SVN_WC__ENTRY_MODIFY_CMT_REV; } else entry->cmt_rev = SVN_INVALID_REVNUM; entry->cmt_author = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_CMT_AUTHOR, APR_HASH_KEY_STRING); if (entry->cmt_author) { *modify_flags |= SVN_WC__ENTRY_MODIFY_CMT_AUTHOR; entry->cmt_author = apr_pstrdup(pool, entry->cmt_author); } } /* Lock token. */ entry->lock_token = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_LOCK_TOKEN, APR_HASH_KEY_STRING); if (entry->lock_token) { *modify_flags |= SVN_WC__ENTRY_MODIFY_LOCK_TOKEN; entry->lock_token = apr_pstrdup(pool, entry->lock_token); } /* lock owner. */ entry->lock_owner = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_LOCK_OWNER, APR_HASH_KEY_STRING); if (entry->lock_owner) { *modify_flags |= SVN_WC__ENTRY_MODIFY_LOCK_OWNER; entry->lock_owner = apr_pstrdup(pool, entry->lock_owner); } /* lock comment. */ entry->lock_comment = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_LOCK_COMMENT, APR_HASH_KEY_STRING); if (entry->lock_comment) { *modify_flags |= SVN_WC__ENTRY_MODIFY_LOCK_COMMENT; entry->lock_comment = apr_pstrdup(pool, entry->lock_comment); } /* lock creation date. */ { const char *cdate_str = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_LOCK_CREATION_DATE, APR_HASH_KEY_STRING); if (cdate_str) { SVN_ERR(svn_time_from_cstring(&entry->lock_creation_date, cdate_str, pool)); *modify_flags |= SVN_WC__ENTRY_MODIFY_LOCK_CREATION_DATE; } } /* has-props flag. */ SVN_ERR(do_bool_attr(&entry->has_props, modify_flags, SVN_WC__ENTRY_MODIFY_HAS_PROPS, atts, SVN_WC__ENTRY_ATTR_HAS_PROPS, name)); /* has-prop-mods flag. */ { const char *has_prop_mods_str = apr_hash_get(atts, SVN_WC__ENTRY_ATTR_HAS_PROP_MODS, APR_HASH_KEY_STRING); if (has_prop_mods_str) { if (strcmp(has_prop_mods_str, "true") == 0) entry->has_prop_mods = TRUE; else if (strcmp(has_prop_mods_str, "false") != 0) return svn_error_createf (SVN_ERR_ENTRY_ATTRIBUTE_INVALID, NULL, _("Entry '%s' has invalid '%s' value"), (name ? name : SVN_WC_ENTRY_THIS_DIR), SVN_WC__ENTRY_ATTR_HAS_PROP_MODS); *modify_flags |= SVN_WC__ENTRY_MODIFY_HAS_PROP_MODS;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -