You say, "It is much appreciated if someone would kindly verify and correct 
any errors in these numbers." I tried to do that and you don't seem to have 
believed me. I will repeat myself: there are three different instances of 
this in the Sage library. The others are either symlinks or they are copies 
made during the Sage build process.


On Thursday, April 14, 2022 at 11:09:50 PM UTC-7 hohoa...@gmail.com wrote:

> Hi,
>
> Thank you for your response, it is much appreciated.
>
> <quote>
> I think your search is following some symbolic links: only three of these 
> instances are under version control (git):
>
>     % git grep 'resolvelinks()'
>     sage:resolvelinks() {
>     src/bin/sage:resolvelinks() {
>     src/bin/sage-env:resolvelinks() {
>
> The last one should probably have a comment in line with the first two
> </quote>
>
> You are correct, not all of the files reported by VSCode are duplications, 
> some are symlinks, my bad
>
> The full listing of these files (both actual and symlink):
>
> 11 actual files: 6 'sage' files, 5 of them are of size *40187*,  one is  
> *5369*. and 5 'sage-env' of size *21981*
> 13 symlinks: 6 for 'sage' and 7 for 'sage-env'
>
> 24 total as reported by VSCode
>
> Please find appended below the said listings.
>
> It is much appreciated if someone would kindly verify and correct any 
> errors in these numbers.
>
> BTW, is symlink a solution for "Copy & Paste"?
> By another way, are there reasons that "Copy & Paste & Symlinks" is better 
> than just symlinks.
>
> Regards,
>
> phiho
>
> ~/sage-9.6$ ls -l sage/sage
> -rwxrwxrwx 1 hph hph *5369 *Apr 13 19:58 sage/sage
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l sage/build/pkgs/sagelib/src/bin/sage
> -rwxrwxrwx 1 hph hph *40187 *Apr 10 19:49 
> sage/build/pkgs/sagelib/src/bin/sage
> ~/sage-9.6$ ls -l sage/build/pkgs/sagelib/src/bin/sage-env
> -rw-rw-rw- 1 hph hph *21981 *Apr 10 19:49 
> sage/build/pkgs/sagelib/src/bin/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/bin/sage
> -rwxrwxrwx 1 hph hph *40187 *Apr 10 19:49 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/bin/sage
> ~/sage-9.6$ ls -l 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/bin/sage-env
> -rw-rw-rw- 1 hph hph *21981 *Apr 10 19:49 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/bin/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/build/scripts-3.10/sage
> -rwxrwxrwx 1 hph hph *40187 *Apr 10 19:49 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/build/scripts-3.10/sage
> ~/sage-9.6$ ls -l 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/build/scripts-3.10/sage-env
> -rwxrwxrwx 1 hph hph *21981 *Apr 10 19:49 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/build/scripts-3.10/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l sage/pkgs/sagemath-standard/bin/sage
> -rwxrwxrwx 1 hph hph *40187 *Apr 10 19:49 
> sage/pkgs/sagemath-standard/bin/sage
> ~/sage-9.6$ ls -l sage/pkgs/sagemath-standard/bin/sage-env
> -rw-rw-rw- 1 hph hph *21981 *Apr 10 19:49 
> sage/pkgs/sagemath-standard/bin/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l sage/src/bin/sage
> -rwxrwxrwx 1 hph hph *40187 *Apr 10 19:49 sage/src/bin/sage
> ~/sage-9.6$ ls -l sage/src/bin/sage-env
> -rw-rw-rw- 1 hph hph *21981 *Apr 10 19:49 sage/src/bin/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_categories/src/bin/sage
> lrwxrwxrwx 1 hph hph 21 Apr 10 19:49 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_categories/src/bin/sage
>  
> -> ../../../src/bin/sage
> ~/sage-9.6$ ls -l 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_categories/src/bin/sage-env
> lrwxrwxrwx 1 hph hph 25 Apr 10 19:49 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_categories/src/bin/sage-env
>  
> -> ../../../src/bin/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_objects/src/bin/sage
> lrwxrwxrwx 1 hph hph 21 Apr 10 19:49 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_objects/src/bin/sage 
> -> ../../../src/bin/sage
> ~/sage-9.6$ ls -l 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_objects/src/bin/sage-env
> lrwxrwxrwx 1 hph hph 25 Apr 10 19:49 
> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_objects/src/bin/sage-env
>  
> -> ../../../src/bin/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l sage/pkgs/sage-conf_pypi/sage_root/src/bin/sage-env
> lrwxrwxrwx 1 hph hph 31 Apr 10 19:49 
> sage/pkgs/sage-conf_pypi/sage_root/src/bin/sage-env -> 
> ../../../../../src/bin/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l sage/pkgs/sagemath-categories/bin/sage
> lrwxrwxrwx 1 hph hph 21 Apr 10 19:49 
> sage/pkgs/sagemath-categories/bin/sage -> ../../../src/bin/sage
> ~/sage-9.6$ ls -l sage/pkgs/sagemath-categories/bin/sage-env
> lrwxrwxrwx 1 hph hph 25 Apr 10 19:49 
> sage/pkgs/sagemath-categories/bin/sage-env -> ../../../src/bin/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l sage/pkgs/sagemath-objects/bin/sage
> lrwxrwxrwx 1 hph hph 21 Apr 10 19:49 sage/pkgs/sagemath-objects/bin/sage 
> -> ../../../src/bin/sage
> ~/sage-9.6$ ls -l sage/pkgs/sagemath-objects/bin/sage-env
> lrwxrwxrwx 1 hph hph 25 Apr 10 19:49 
> sage/pkgs/sagemath-objects/bin/sage-env -> ../../../src/bin/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l sage/build/pkgs/sagemath_categories/src/bin/sage
> lrwxrwxrwx 1 hph hph 21 Apr 10 19:49 
> sage/build/pkgs/sagemath_categories/src/bin/sage -> ../../../src/bin/sage
> ~/sage-9.6$ ls -l sage/build/pkgs/sagemath_categories/src/bin/sage-env
> lrwxrwxrwx 1 hph hph 25 Apr 10 19:49 
> sage/build/pkgs/sagemath_categories/src/bin/sage-env -> 
> ../../../src/bin/sage-env
> ~/sage-9.6$
>
> ~/sage-9.6$ ls -l sage/build/pkgs/sagemath_objects/src/bin/sage
> lrwxrwxrwx 1 hph hph 21 Apr 10 19:49 
> sage/build/pkgs/sagemath_objects/src/bin/sage -> ../../../src/bin/sage
> ~/sage-9.6$ ls -l sage/build/pkgs/sagemath_objects/src/bin/sage-env
> lrwxrwxrwx 1 hph hph 25 Apr 10 19:49 
> sage/build/pkgs/sagemath_objects/src/bin/sage-env -> 
> ../../../src/bin/sage-env
> ~/sage-9.6$
>
>
> On Thu, Apr 14, 2022 at 8:25 PM John H Palmieri <jhpalm...@gmail.com> 
> wrote:
>
>> I think your search is following some symbolic links: only three of these 
>> instances are under version control (git):
>>
>>     % git grep 'resolvelinks()'
>>     sage:resolvelinks() {
>>     src/bin/sage:resolvelinks() {
>>     src/bin/sage-env:resolvelinks() {
>>
>> The last one should probably have a comment in line with the first two.
>>
>>
>> On Thursday, April 14, 2022 at 4:55:08 PM UTC-7 hohoa...@gmail.com wrote:
>>
>>> Hi,
>>>
>>> <quote>
>>> Personally, I would rather see the time spent investigating whether or
>>> not we truly need the symlink-free path in the instances where
>>> resolvelinks() is currently used. I would guess not -- that there is a
>>> better solution to whatever other problem prompted the resolvelinks()
>>> function. But I don't know what that problem was. And to remove the
>>> function and "see what happens" would be committing yourself to
>>> answering bug reports from weird sage installs for the next twelve
>>> months.
>>> </quote>
>>>
>>> Now your concern is truly appreciated.
>>>
>>>  "Find in File" in "Visual Studio Code" reveals duplications in* 24 
>>> files in 13 directories* (please find the results appended below)
>>>
>>> It is amazing that SageMath is still maintainable up to now,  release 9.6
>>> Maybe 'resolvelinks' is just  the tip of an iceberg (something more 
>>> important is missing?)
>>>
>>> Best wishes,
>>>
>>> phiho
>>>
>>> *# Query: resolvelinks()*
>>> # ContextLines: 1
>>>
>>> 24 results - 24 files
>>>
>>> sage/sage:
>>>   32  # meantime however the two should be kept synchronized.
>>>   33: resolvelinks() {
>>>   34      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/build/pkgs/sagelib/src/bin/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/build/pkgs/sagelib/src/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/build/pkgs/sagemath_categories/src/bin/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/build/pkgs/sagemath_categories/src/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/build/pkgs/sagemath_objects/src/bin/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/build/pkgs/sagemath_objects/src/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/bin/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/build/scripts-3.10/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/build/scripts-3.10/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_categories/src/bin/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_categories/src/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_objects/src/bin/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_objects/src/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/src/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/pkgs/sagemath-categories/bin/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/pkgs/sagemath-categories/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/pkgs/sagemath-objects/bin/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/pkgs/sagemath-objects/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/pkgs/sagemath-standard/bin/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/pkgs/sagemath-standard/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/src/bin/sage:
>>>   4  # the top-level "sage" script. Please keep them synchronized.
>>>   5: resolvelinks() {
>>>   6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> sage/src/bin/sage-env:
>>>   35  #
>>>   36: resolvelinks() {
>>>   37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>> *# Query: resolvelinks* 
>>> # ContextLines: 1
>>>
>>> 36 results - 24 files
>>>
>>> sage/sage:
>>>   110      # resolved
>>>   111:     SAGE_ROOT=`resolvelinks "$0"` || \
>>>   112      SAGE_ROOT="$0"
>>>
>>> sage/build/pkgs/sagelib/src/bin/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/build/pkgs/sagelib/src/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/build/pkgs/sagemath_categories/src/bin/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/build/pkgs/sagemath_categories/src/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/build/pkgs/sagemath_objects/src/bin/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/build/pkgs/sagemath_objects/src/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/bin/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/build/scripts-3.10/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/build/scripts-3.10/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_categories/src/bin/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_categories/src/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_objects/src/bin/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_objects/src/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/src/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/pkgs/sagemath-categories/bin/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/pkgs/sagemath-categories/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/pkgs/sagemath-objects/bin/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/pkgs/sagemath-objects/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/pkgs/sagemath-standard/bin/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/pkgs/sagemath-standard/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/src/bin/sage:
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/src/bin/sage-env:
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> (*resolvelinks() * and   *resolvelinks c*ombined)
>>>
>>> *# Query: resolvelinks*
>>> # ContextLines: 1
>>>
>>> 60 results - 24 files
>>>
>>> sage/sage:
>>>    32  # meantime however the two should be kept synchronized.
>>>    33: resolvelinks() {
>>>    34      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   110      # resolved
>>>   111:     SAGE_ROOT=`resolvelinks "$0"` || \
>>>   112      SAGE_ROOT="$0"
>>>
>>> sage/build/pkgs/sagelib/src/bin/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/build/pkgs/sagelib/src/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/build/pkgs/sagemath_categories/src/bin/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/build/pkgs/sagemath_categories/src/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/build/pkgs/sagemath_objects/src/bin/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/build/pkgs/sagemath_objects/src/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/bin/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/build/scripts-3.10/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagelib/src/build/scripts-3.10/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_categories/src/bin/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_categories/src/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_objects/src/bin/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/build/pkgs/sagemath_objects/src/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/pkgs/sage-conf_pypi/sage_root/src/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/pkgs/sagemath-categories/bin/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/pkgs/sagemath-categories/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/pkgs/sagemath-objects/bin/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/pkgs/sagemath-objects/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/pkgs/sagemath-standard/bin/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/pkgs/sagemath-standard/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>> sage/src/bin/sage:
>>>    4  # the top-level "sage" script. Please keep them synchronized.
>>>    5: resolvelinks() {
>>>    6      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   80  # a symlink (Trac #30888).
>>>   81: SELF=$(resolvelinks "${0}")
>>>   82  
>>>
>>> sage/src/bin/sage-env:
>>>    35  #
>>>    36: resolvelinks() {
>>>    37      # $in is what still needs to be converted (normally has no 
>>> starting slash)
>>>
>>>   338      # non-existing directory.
>>>   339:     DOT_SAGE=`resolvelinks "$HOME/.sage"`
>>>   340  
>>>
>>>   630          # The activate script needs to be sourced using its 
>>> actual path.
>>>   631:         nodeenv_activate=`resolvelinks "$nodeenv_activate"`
>>>   632  
>>>
>>>
>>> On Wed, Apr 13, 2022 at 11:21 PM Michael Orlitzky <mic...@orlitzky.com> 
>>> wrote:
>>>
>>>> On Wed, 2022-04-13 at 19:36 -0700, ph h wrote:
>>>> > Dear All,
>>>> > 
>>>> > At the top of 'sage/src/bin/sage' script:
>>>> > 
>>>> > <quote>
>>>> > # WARNING: this function is copy/pasted from both src/bin/sage-env and
>>>> > # the top-level "sage" script. Please keep them synchronized.
>>>> > resolvelinks() {
>>>> > </quote>
>>>> > 
>>>> > Is there any other way to keep them in sync without using Copy&Paste?
>>>> > 
>>>>
>>>> I think I'm at least partly responsible for that. There are a few ways
>>>> we could de-duplicate those scripts, but it's not clear that any of
>>>> them are less complex or easier to maintain than copy/paste for now.
>>>>
>>>> Personally, I would rather see the time spent investigating whether or
>>>> not we truly need the symlink-free path in the instances where
>>>> resolvelinks() is currently used. I would guess not -- that there is a
>>>> better solution to whatever other problem prompted the resolvelinks()
>>>> function. But I don't know what that problem was. And to remove the
>>>> function and "see what happens" would be committing yourself to
>>>> answering bug reports from weird sage installs for the next twelve
>>>> months.
>>>>
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "sage-devel" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to sage-devel+...@googlegroups.com.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/sage-devel/2deae4f7c986bad7542756d2ff32189f99d2a7db.camel%40orlitzky.com
>>>> .
>>>>
>>> -- 
>>
> You received this message because you are subscribed to a topic in the 
>> Google Groups "sage-devel" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/sage-devel/NLo0tDg7Az0/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to 
>> sage-devel+...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/sage-devel/2f6814e0-701b-4c55-a119-e49d94ecf5can%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/sage-devel/2f6814e0-701b-4c55-a119-e49d94ecf5can%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/744ddcbf-8c15-4adf-b276-aabe0dde0fc7n%40googlegroups.com.

Reply via email to