Merge two path specification patterns. This implementation merge two path specification patterns on different bases. It returns the longest common parent directory, and the patterns based on this new base directory.
(flavour, pattern_a, prefix_a, pattern_b, prefix_b)
| 71 | |
| 72 | |
| 73 | def merge_patterns(flavour, pattern_a, prefix_a, pattern_b, prefix_b): |
| 74 | """ |
| 75 | Merge two path specification patterns. |
| 76 | |
| 77 | This implementation merge two path specification patterns on different |
| 78 | bases. It returns the longest common parent directory, and the patterns |
| 79 | based on this new base directory. |
| 80 | """ |
| 81 | if not pattern_a: |
| 82 | return pattern_b, prefix_b |
| 83 | if not pattern_b: |
| 84 | return pattern_a, prefix_a |
| 85 | |
| 86 | longest_common_dir = flavour.commonpath([prefix_a, prefix_b]) |
| 87 | new_pattern_a = _change_dirname(prefix_a, pattern_a, longest_common_dir) |
| 88 | new_pattern_b = _change_dirname(prefix_b, pattern_b, longest_common_dir) |
| 89 | |
| 90 | if len(prefix_a) <= len(prefix_b): |
| 91 | merged_pattern = new_pattern_a + new_pattern_b |
| 92 | else: |
| 93 | merged_pattern = new_pattern_b + new_pattern_a |
| 94 | |
| 95 | return merged_pattern, longest_common_dir |