svn commit: r185211 - projects/csup_cvsmode/contrib/csup

Ulf Lilleengen lulf at FreeBSD.org
Sun Nov 23 08:44:49 PST 2008


Author: lulf
Date: Sun Nov 23 16:44:49 2008
New Revision: 185211
URL: http://svn.freebsd.org/changeset/base/185211

Log:
  - Make sure comparisons are done on file types as well.
  - Handle the case where a repository may have been copied, and the symlinks have
    not been preserved. CVSup removes the files and creates the symlinks, so
    enable this behaviour in csup as well.
  - While there, fix comments and style issues.

Modified:
  projects/csup_cvsmode/contrib/csup/fattr.c
  projects/csup_cvsmode/contrib/csup/updater.c

Modified: projects/csup_cvsmode/contrib/csup/fattr.c
==============================================================================
--- projects/csup_cvsmode/contrib/csup/fattr.c	Sun Nov 23 16:08:36 2008	(r185210)
+++ projects/csup_cvsmode/contrib/csup/fattr.c	Sun Nov 23 16:44:49 2008	(r185211)
@@ -840,6 +840,19 @@ fattr_install(struct fattr *fa, const ch
 		}
 #endif
 
+		/*
+		 * If it is changed from a file to a symlink, remove the file
+		 * and create the symlink.
+		 */
+		if (inplace && (fa->type == FT_SYMLINK) &&
+		    (old->type == FT_FILE)) {
+			error = unlink(topath);
+			if (error)
+				goto bad;
+			error = symlink(fa->linktarget, topath);
+			if (error)
+				goto bad;
+		}
 		/* Determine whether we need to remove the target first. */
 		if (!inplace && (fa->type == FT_DIRECTORY) !=
 		    (old->type == FT_DIRECTORY)) {
@@ -919,6 +932,9 @@ fattr_equal(const struct fattr *fa1, con
 	mask = fa1->mask & fa2->mask;
 	if (fa1->type == FT_UNKNOWN || fa2->type == FT_UNKNOWN)
 		return (0);
+	if (mask & FA_FILETYPE)
+		if (fa1->type != fa2->type)
+			return (0);
 	if (mask & FA_MODTIME)
 		if (fa1->modtime != fa2->modtime)
 			return (0);

Modified: projects/csup_cvsmode/contrib/csup/updater.c
==============================================================================
--- projects/csup_cvsmode/contrib/csup/updater.c	Sun Nov 23 16:08:36 2008	(r185210)
+++ projects/csup_cvsmode/contrib/csup/updater.c	Sun Nov 23 16:44:49 2008	(r185211)
@@ -1255,13 +1255,13 @@ updater_diff_apply(struct updater *up, s
 
 /* Update or create a node. */
 static int
-updater_updatenode(struct updater *up, struct coll *coll, struct file_update *fup, char *name, 
-    char *attr)
+updater_updatenode(struct updater *up, struct coll *coll,
+    struct file_update *fup, char *name, char *attr)
 {
 	struct fattr *fa, *fileattr;
 	struct status *st;
 	struct statusrec *sr;
-	int error, issymlink, rv;
+	int error, rv;
 
 	sr = &fup->srbuf;
 	st = fup->st;
@@ -1270,10 +1270,8 @@ updater_updatenode(struct updater *up, s
 	if (fattr_type(fa) == FT_SYMLINK) {
 		lprintf(1, " Symlink %s -> %s\n", name, 
 		    fattr_getlinktarget(fa));
-		issymlink = 1;
 	} else {
 		lprintf(1, " Mknod %s\n", name);
-		issymlink = 0;
 	}
 
 	/* Create directory. */
@@ -1281,11 +1279,11 @@ updater_updatenode(struct updater *up, s
 	if (error)
 		return (UPDATER_ERR_PROTO);
 
-	/* If it exists, update attributes. */
+	/* If it does not exist, create it. */
 	if (access(fup->destpath, F_OK) != 0)
 		fattr_makenode(fa, fup->destpath);
-  
-	/* 
+
+	/*
 	 * Coming from attic? I don't think this is a problem since we have
 	 * determined attic before we call this function (Look at UpdateNode in
 	 * cvsup).


More information about the svn-src-projects mailing list