diff options
author | Paul Jones <paulj@lshift.net> | 2009-07-29 09:57:30 +0100 |
---|---|---|
committer | Paul Jones <paulj@lshift.net> | 2009-07-29 09:57:30 +0100 |
commit | 2ef612a20705b34945212cb4084dbd1d95d7d7d9 (patch) | |
tree | 85bbfd3608c94fd9532e3bc17c8ddd7802479153 /calculate-relative | |
parent | 163388e95d53b3ba85bed49540cbefd9626161ec (diff) | |
download | rabbitmq-server-2ef612a20705b34945212cb4084dbd1d95d7d7d9.tar.gz |
Packaging location changes for debs, macports, windows and RPMS
Diffstat (limited to 'calculate-relative')
-rwxr-xr-x | calculate-relative | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/calculate-relative b/calculate-relative new file mode 100755 index 00000000..3c3e2b1f --- /dev/null +++ b/calculate-relative @@ -0,0 +1,45 @@ +#!/usr/bin/python +# +# relpath.py +# R.Barran 30/08/2004 +# Retrieved from http://code.activestate.com/recipes/302594/ + +import os +import sys + +def relpath(target, base=os.curdir): + """ + Return a relative path to the target from either the current dir or an optional base dir. + Base can be a directory specified either as absolute or relative to current dir. + """ + + if not os.path.exists(target): + raise OSError, 'Target does not exist: '+target + + if not os.path.isdir(base): + raise OSError, 'Base is not a directory or does not exist: '+base + + base_list = (os.path.abspath(base)).split(os.sep) + target_list = (os.path.abspath(target)).split(os.sep) + + # On the windows platform the target may be on a completely different drive from the base. + if os.name in ['nt','dos','os2'] and base_list[0] <> target_list[0]: + raise OSError, 'Target is on a different drive to base. Target: '+target_list[0].upper()+', base: '+base_list[0].upper() + + # Starting from the filepath root, work out how much of the filepath is + # shared by base and target. + for i in range(min(len(base_list), len(target_list))): + if base_list[i] <> target_list[i]: break + else: + # If we broke out of the loop, i is pointing to the first differing path elements. + # If we didn't break out of the loop, i is pointing to identical path elements. + # Increment i so that in all cases it points to the first differing path elements. + i+=1 + + rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:] + if (len(rel_list) == 0): + return "." + return os.path.join(*rel_list) + +if __name__ == "__main__": + print(relpath(sys.argv[1], sys.argv[2])) |