code: protected List<? extends ItemData> mergeProps(ItemData rootData, List<PropertyData> childProperties,
        DataManager dataManager) throws RepositoryException
     {
        // 1 get all transient descendants
        Collection<ItemState> transientDescendants = changesLog.getLastChildrenStates(rootData, false);
  
        if (!transientDescendants.isEmpty())
        {
           Map<String, ItemData> descendants = new LinkedHashMap<String, ItemData>();
           outer : for (int i = 0, length = childProperties.size(); i < length; i++)
           {
              ItemData childProp = childProperties.get(i);
              for (ItemState transientState : transientDescendants)
              {
                 if (!transientState.isNode() && !transientState.isDeleted()
                    && transientState.getData().getQPath().getDepth() == childProp.getQPath().getDepth()
                    && transientState.getData().getQPath().getName().equals(childProp.getQPath().getName()))
                 {
                    continue outer;
                 }
              }
              descendants.put(childProp.getIdentifier(), childProp);
           }
  
           // merge data
           for (ItemState state : transientDescendants)
           {
              ItemData data = state.getData();
              if (!state.isDeleted())
              {
                 descendants.put(data.getIdentifier(), data);
              }
              else
              {
                 descendants.remove(data.getIdentifier());
              }
           }
           Collection<ItemData> desc = descendants.values();
           return new ArrayList<ItemData>(desc);
        }
        else
        {
           return childProperties;
        }
     }
docs: Merges incoming property data with changes stored in this log i.e: 1. incoming data still not modified
  if there are no corresponding changes 2. incoming data is refreshed with corresponding changes
  if any 3. new datas is added from changes 4. if chaged data is marked as "deleted" it removes
  from outgoing list WARN. THIS METHOD HAS SIBLING - mergeList, see below.
  
  @param rootData
  @param childProperties
  @param dataManager
  @return