0

I noticed that git commit has a fancy way of showing source/destination path in a regex-like way, for example:

wallpapers/{8.jpg => 1.jpg}

Is there any Python module that produces this kind of "shortenage"? For example, I would expect something like:

/home/user/doc.pdf => /home/user/Desktop/doc.pdf

turned into

/home/user/{doc.pdf => Desktop/doc.pdf}

or perhaps even

/home/user/{ => Desktop}/doc.pdf

another example from git

{deprecated => deprecated code}/Binary.cs 
ArekBulski
  • 4,520
  • 4
  • 39
  • 61

1 Answers1

1

My answer to How to circumvent the fallacy of Python's os.path.commonprefix? can be modified to produce this result:

def commonprefix(l):
    # this unlike the os.path.commonprefix version
    # always returns path prefixes as it compares
    # path component wise
    cp = []
    ls = [p.split('/') for p in l]
    ml = min( len(p) for p in ls )

    for i in range(ml):

        s = set( p[i] for p in ls )         
        if len(s) != 1:
            break

        cp.append(s.pop())

    return '/'.join(cp+['{'+' => '.join('/'.join(p[i:]) for p in ls)+'}'])

print commonprefix(['wallpapers/8.jpg','wallpapers/1.jpg'])
print commonprefix(['/home/user/doc.pdf', '/home/user/Desktop/doc.pdf'])

Prints:

wallpapers/{8.jpg => 1.jpg}
/home/user/{doc.pdf => Desktop/doc.pdf}
Community
  • 1
  • 1
Dan D.
  • 73,243
  • 15
  • 104
  • 123