| . "\n"␊ |
| . 'file_del = "{file_del}\0"'␊ |
| . "\n"␊ |
| . 'file_copy = "{name}\0{source}\0"'␊ |
| . 'file_copy = "{source}\0{name}\0"'␊ |
| . "\n";␊ |
| } else {␊ |
| throw new IDF_Scm_Exception('invalid type ' . $type);␊ |
|
| 'patches' => preg_split('/\0/', $log->file_mods, -1, PREG_SPLIT_NO_EMPTY),␊ |
| // hg has no support for built-in attributes, so this keeps empty␊ |
| 'properties' => array(),␊ |
| // this is filled below␊ |
| // these two are filled below␊ |
| 'copies' => array(),␊ |
| 'renames' => array(),␊ |
| );␊ |
| ␊ |
| $file_copies = preg_split('/\0/', $log->file_copies, -1, PREG_SPLIT_NO_EMPTY);␊ |
| ␊ |
| // FIXME: copies are only treated as renames if they have an add _and_␊ |
| // an drop, otherwise they're just treated as adds␊ |
| // copies are treated as renames if they have an add _and_ a drop;␊ |
| // only if they only have an add, but no drop, they're treated as copies␊ |
| for ($i=0; $i<count($file_copies); $i+=2) {␊ |
| $new = $file_copies[$i];␊ |
| $old = $file_copies[$i+1];␊ |
| $newidx = array_search($new, $return->additions);␊ |
| $oldidx = array_search($old, $return->deletions);␊ |
| if ($newidx !== false && $oldidx !== false) {␊ |
| $return->renames[$old] = $new;␊ |
| unset($return->additions[$newidx]);␊ |
| unset($return->deletions[$oldidx]);␊ |
| $src = $file_copies[$i];␊ |
| $trg = $file_copies[$i+1];␊ |
| $srcidx = array_search($src, $return->deletions);␊ |
| $trgidx = array_search($trg, $return->additions);␊ |
| if ($srcidx !== false && $trgidx !== false) {␊ |
| $return->renames[$src] = $trg;␊ |
| unset($return->deletions[$srcidx]);␊ |
| unset($return->additions[$trgidx]);␊ |
| continue;␊ |
| }␊ |
| if ($srcidx === false && $trgidx !== false) {␊ |
| $return->copies[$src] = $trg;␊ |
| unset($return->additions[$trgidx]);␊ |
| continue;␊ |
| }␊ |
| // file sutures (counter-operation to copy) not supported␊ |
| }␊ |
| ␊ |
| return $return;␊ |