summaryrefslogtreecommitdiffstats
path: root/contrib/cvs/src/classify.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/cvs/src/classify.c')
-rw-r--r--contrib/cvs/src/classify.c68
1 files changed, 48 insertions, 20 deletions
diff --git a/contrib/cvs/src/classify.c b/contrib/cvs/src/classify.c
index 8bb471d..d8bf399 100644
--- a/contrib/cvs/src/classify.c
+++ b/contrib/cvs/src/classify.c
@@ -17,6 +17,50 @@
static void sticky_ck PROTO ((struct file_info *finfo, int aflag,
Vers_TS * vers));
+
+
+static inline int keywords_may_change PROTO ((int aflag, Vers_TS * vers));
+static inline int
+keywords_may_change (aflag, vers)
+ int aflag;
+ Vers_TS * vers;
+{
+ int retval;
+
+ if (/* Options are different... */
+ strcmp (vers->entdata->options, vers->options)
+ /* ...or... */
+ || (/* ...clearing stickies... */
+ aflag
+ /* ...and... */
+ && (/* ...there used to be a tag which subs in Name keys... */
+ (vers->entdata->tag && !isdigit (vers->entdata->tag[0]))
+ /* ...or there used to be a keyword mode which may be
+ * changed by -A...
+ */
+ || (strlen (vers->entdata->options)
+ && strcmp (vers->entdata->options, "-kkv")
+ && strcmp (vers->entdata->options, "-kb"))))
+ /* ...or... */
+ || (/* ...this is not commit... */
+ strcmp (cvs_cmd_name, "commit")
+ /* ...and... */
+ && (/* ...the tag is changing in a way that affects Name keys... */
+ (vers->entdata->tag && vers->tag
+ && strcmp (vers->entdata->tag, vers->tag)
+ && !(isdigit (vers->entdata->tag[0])
+ && isdigit (vers->entdata->tag[0])))
+ || (!vers->entdata->tag && vers->tag
+ && !isdigit (vers->tag[0])))))
+ retval = 1;
+ else
+ retval = 0;
+
+ return retval;
+}
+
+
+
/*
* Classify the state of a file
*/
@@ -297,15 +341,14 @@ Classify_File (finfo, tag, date, options, force_tag_match, aflag, versp,
*/
/* TODO: decide whether we need to check file permissions
for a mismatch, and return T_CONFLICT if so. */
- if (vers->entdata->options &&
- strcmp (vers->entdata->options, vers->options) != 0)
- ret = T_CHECKOUT;
+ if (keywords_may_change (aflag, vers))
+ ret = T_PATCH;
else if (vers->ts_conflict)
ret = T_CONFLICT;
else
{
- sticky_ck (finfo, aflag, vers);
ret = T_UPTODATE;
+ sticky_ck (finfo, aflag, vers);
}
}
else if (No_Difference (finfo, vers))
@@ -366,29 +409,14 @@ Classify_File (finfo, tag, date, options, force_tag_match, aflag, versp,
ret = T_CHECKOUT;
}
else if (strcmp (vers->ts_user, vers->ts_rcs) == 0)
- {
/*
* The user file is still unmodified, so just get it as well
*/
- if (strcmp (vers->entdata->options ?
- vers->entdata->options : "", vers->options) != 0
- || (vers->srcfile != NULL
- && (vers->srcfile->flags & INATTIC) != 0))
- ret = T_CHECKOUT;
- else
- ret = T_PATCH;
- }
+ ret = T_PATCH;
else if (No_Difference (finfo, vers))
/* really modified, needs to merge */
ret = T_NEEDS_MERGE;
- else if ((strcmp (vers->entdata->options ?
- vers->entdata->options : "", vers->options)
- != 0)
- || (vers->srcfile != NULL
- && (vers->srcfile->flags & INATTIC) != 0))
- /* not really modified, check it out */
- ret = T_CHECKOUT;
else
ret = T_PATCH;
}
OpenPOWER on IntegriCloud