@VisibleForTesting
  protected static MoveWork mergeMovePaths(Path condInputPath, MoveWork linkedMoveWork,
      LineageState lineageState) {
    MoveWork newWork = new MoveWork(linkedMoveWork);
    LoadFileDesc fileDesc = null;
    LoadTableDesc tableDesc = null;

    if (linkedMoveWork.getLoadFileWork() != null) {
      fileDesc = new LoadFileDesc(linkedMoveWork.getLoadFileWork());
      fileDesc.setSourcePath(condInputPath);
      lineageState.updateDirToOpMap(condInputPath, linkedMoveWork.getLoadFileWork().getSourcePath());
    } else if (linkedMoveWork.getLoadTableWork() != null) {
      tableDesc = new LoadTableDesc(linkedMoveWork.getLoadTableWork());
      tableDesc.setSourcePath(condInputPath);
      lineageState.updateDirToOpMap(condInputPath, linkedMoveWork.getLoadTableWork().getSourcePath());
    } else {
      throw new IllegalArgumentException("Merging a path with a MoveWork with multi-files work is not allowed.");
    }

    newWork.setLoadFileWork(fileDesc);
    newWork.setLoadTableWork(tableDesc);

    return newWork;
  }
Merges the given Conditional input path and the linked MoveWork into one only MoveWork.
This is an optimization for BlobStore systems to avoid doing two renames or copies that are not necessary.

@param condInputPath A path that the ConditionalTask uses as input for its sub-tasks.
@param linkedMoveWork A MoveWork that the ConditionalTask uses to link to its sub-tasks.
@param lineageState A LineageState used to track what changes.
@return A new MoveWork that has the Conditional input path as source and the linkedMoveWork as target.
ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java