Ejemplo n.º 1
0
int
cpFileUtil( rcComm_t *conn, char *srcPath, char *targPath, rodsLong_t srcSize,
            rodsArguments_t *rodsArgs, dataObjCopyInp_t *dataObjCopyInp ) {
    int status;
    struct timeval startTime, endTime;

    if ( srcPath == NULL || targPath == NULL ) {
        rodsLog( LOG_ERROR,
                 "cpFileUtil: NULL srcPath or targPath in cp" );
        return USER__NULL_INPUT_ERR;
    }

    if ( rodsArgs->verbose == True ) {
        ( void ) gettimeofday( &startTime, ( struct timezone * )0 );
    }

    if ( gGuiProgressCB != NULL ) {
        rstrcpy( conn->operProgress.curFileName, srcPath, MAX_NAME_LEN );
        conn->operProgress.curFileSize = srcSize;
        conn->operProgress.curFileSizeDone = 0;
        conn->operProgress.flag = 0;
        gGuiProgressCB( &conn->operProgress );
    }

    rstrcpy( dataObjCopyInp->destDataObjInp.objPath, targPath, MAX_NAME_LEN );
    rstrcpy( dataObjCopyInp->srcDataObjInp.objPath, srcPath, MAX_NAME_LEN );
    dataObjCopyInp->srcDataObjInp.dataSize = -1;

    status = rcDataObjCopy( conn, dataObjCopyInp );

    if ( status >= 0 ) {
        if ( rodsArgs->verbose == True ) {
            ( void ) gettimeofday( &endTime, ( struct timezone * )0 );
            printTiming( conn, dataObjCopyInp->destDataObjInp.objPath,
                         conn->transStat.bytesWritten, NULL, &startTime, &endTime );
        }
        if ( gGuiProgressCB != NULL ) {
            conn->operProgress.totalNumFilesDone++;
            conn->operProgress.totalFileSizeDone += srcSize;
        }
    }

    return status;
}
Ejemplo n.º 2
0
int
rsyncDataToDataUtil (rcComm_t *conn, rodsPath_t *srcPath, 
rodsPath_t *targPath, rodsEnv *myRodsEnv, rodsArguments_t *myRodsArgs, 
dataObjCopyInp_t *dataObjCopyInp)
{
    int status;
    struct timeval startTime, endTime;
    int syncFlag = 0;
    int cpFlag = 0;
 
    if (srcPath == NULL || targPath == NULL) {
       rodsLog (LOG_ERROR,
          "rsyncDataToDataUtil: NULL srcPath or targPath input");
        return (USER__NULL_INPUT_ERR);
    }
    /* check the age */
    if (myRodsArgs->age == True) {
        if (srcPath->rodsObjStat != NULL) {
           if (ageExceeded (myRodsArgs->agevalue,
              atoi (srcPath->rodsObjStat->modifyTime), myRodsArgs->verbose,
              srcPath->outPath, srcPath->size)) return 0;
        }
    }
    if (myRodsArgs->verbose == True) {
        (void) gettimeofday(&startTime, (struct timezone *)0);
        bzero (&conn->transStat, sizeof (transStat_t));
    }

    if (targPath->objState == NOT_EXIST_ST) {
	cpFlag = 1;
    } else if (myRodsArgs->sizeFlag == True) {
	/* sync by size */
	if (targPath->size != srcPath->size) {
	    cpFlag = 1;
	}
    } else if (strlen (srcPath->chksum) > 0 && strlen (targPath->chksum) > 0) {
	/* src and trg has a checksum value */
	if (strcmp (targPath->chksum, srcPath->chksum) != 0) {
	    cpFlag = 1;
	}
    } else { 
	syncFlag = 1;
    }

    if (cpFlag == 1) {
        rstrcpy (dataObjCopyInp->srcDataObjInp.objPath, srcPath->outPath, 
          MAX_NAME_LEN);
        dataObjCopyInp->srcDataObjInp.dataSize = srcPath->size;
        rstrcpy (dataObjCopyInp->destDataObjInp.objPath, targPath->outPath, 
          MAX_NAME_LEN);
	/* only do the sync if no -l option specified */
	if ( myRodsArgs->longOption != True ) {
	    status = rcDataObjCopy (conn, dataObjCopyInp);
	} else {
	    status = 0;
	    printf ("%s   %lld   N\n", srcPath->outPath, srcPath->size);
	}
    } else if (syncFlag == 1) {
	dataObjInp_t *dataObjOprInp = &dataObjCopyInp->destDataObjInp;
        rstrcpy (dataObjOprInp->objPath, srcPath->outPath, 
          MAX_NAME_LEN);
        dataObjOprInp->dataSize = srcPath->size;
        addKeyVal (&dataObjOprInp->condInput, RSYNC_DEST_PATH_KW,
          targPath->outPath);
	addKeyVal (&dataObjOprInp->condInput, RSYNC_MODE_KW, IRODS_TO_IRODS);
	/* only do the sync if no -l option specified */
	if ( myRodsArgs->longOption != True ) {
	    status = rcDataObjRsync (conn, dataObjOprInp);
	} else {
	    status = 0;
	    printf ("%s   %lld   N\n", srcPath->outPath, srcPath->size);
	}
        rmKeyVal (&dataObjOprInp->condInput, RSYNC_MODE_KW);
        rmKeyVal (&dataObjOprInp->condInput, RSYNC_DEST_PATH_KW);
    } else {
	status = 0;
    }

    if (status >= 0 && myRodsArgs->verbose == True) {
	if (cpFlag > 0 ||
	  (syncFlag > 0 && status == SYS_RSYNC_TARGET_MODIFIED)) {
            (void) gettimeofday(&endTime, (struct timezone *)0);
            printTiming (conn, srcPath->outPath, srcPath->size, 
	      targPath->outPath, &startTime, &endTime);
	} else {
            printNoSync (srcPath->outPath, srcPath->size, "a match");
        }
    }

    return (status);
}