Check-in [6919e92033]
Not logged in
Overview
Comment:Add support for automatically detecting the platform for a package to be downloaded.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 6919e920331d41d0e1f46b3a5e42c1d06ded1002
User & Date: mistachkin on 2016-10-28 04:53:04
Other Links: manifest | tags
Context
2016-10-28
04:59
Add temporary directory cleanup block missing from the previous check-in. check-in: 1c31eb341e user: mistachkin tags: trunk
04:53
Add support for automatically detecting the platform for a package to be downloaded. check-in: 6919e92033 user: mistachkin tags: trunk
02:15
Allow the platform string 'neutral' to be used manually. check-in: 3dee9dc9c9 user: mistachkin tags: trunk
Changes

Modified client/1.0/neutral/pkgd.eagle from [63920e2496] to [b9b96e7274].

33
34
35
36
37
38
39










40
41
42
43
44
45
46
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56







+
+
+
+
+
+
+
+
+
+







    #
    variable loginUrn; # DEFAULT: pkgd_login

    if {$force || ![info exists loginUrn]} then {
      set loginUrn pkgd_login
    }

    #
    # NOTE: The URN, relative to the base URI, where the list of supported
    #       platforms for a single package may be found.
    #
    variable platformsUrn; # DEFAULT: pkgd_platforms

    if {$force || ![info exists platformsUrn]} then {
      set platformsUrn pkgd_platforms
    }

    #
    # NOTE: The URN, relative to the base URI, where a single package file
    #       may be found.
    #
    variable downloadUrn; # DEFAULT: pkgd_file

    if {$force || ![info exists downloadUrn]} then {
81
82
83
84
85
86
87










88
89
90
91
92
93
94
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114







+
+
+
+
+
+
+
+
+
+







    variable loginUri; # DEFAULT: ${baseUri}/${loginUrn}?...

    if {$force || ![info exists loginUri]} then {
      set loginUri [appendArgs \
          {${baseUri}/${loginUrn}?} {[uriEscape name $userName]} & \
          {[uriEscape password $password]}]
    }

    #
    # NOTE: The URI where the list of supported platforms for a single
    #       package may be found.
    #
    variable platformsUri; # DEFAULT: ${baseUri}/${platformsUrn}?...

    if {$force || ![info exists platformsUri]} then {
      set platformsUri {${baseUri}/${platformsUrn}?download&name=trunk}
    }

    #
    # NOTE: The URI where a single package file may be found.  This file will
    #       belong to a specific version of one package.
    #
    variable downloadUri; # DEFAULT: ${baseUri}/${downloadUrn}?...

389
390
391
392
393
394
395
396

397
398
399
400
401
402
403
409
410
411
412
413
414
415

416
417
418
419
420
421
422
423







-
+







  proc isOpenPgpSignatureFileName { fileName nameOnly } {
    if {[string length $fileName] == 0} then {
      return false
    }

    set extension [file extension $fileName]

    if {$extension eq ".asc"} then {
    if {$extension eq ".txt" || $extension eq ".asc"} then {
      if {!$nameOnly && [file exists $fileName]} then {
        return [::PackageRepository::isOpenPgpSignature \
            [readFile $fileName]]
      } else {
        return true
      }
    } else {
634
635
636
637
638
639
640
641












































642
643
644
645
646
647
648





649
650



651
652
653






654
655
656
657
658
659
660



































661
662

663



















664
665
666
667
668
669
670
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709



710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728







729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764

765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792








+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+




-
-
-
+
+
+
+
+


+
+
+



+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+








      set isClient true
    } else {
      error "unsupported language"
    }
  }

  #
  # NOTE: This procedure returns the name of the current platform.  There are
  #       no arguments.  An empty string will be returned if the name of the
  #       current platform cannot be determined for any reason.
  #
  proc getPlatform {} {
    global tcl_platform

    if {[info exists tcl_platform(platform)]} then {
      set platform $tcl_platform(platform)

      if {[info exists tcl_platform(machine)]} then {
        set machine $tcl_platform(machine)
      } else {
        set machine ""
      }

      switch -exact -- $platform {
        windows {
          switch -exact -- $machine {
            intel -
            ia32_on_win64 {
              return win32-x86
            }
            arm {
              return win32-arm
            }
            ia64 {
              return win64-ia64
            }
            amd64 {
              return win64-x64
            }
            arm64 {
              return win64-arm64
            }
          }
        }
      }
    }

    return ""
  }

  #
  # NOTE: This procedure verifies the platform specified by the caller.  The
  #       platform argument must be an empty string -OR- one of the literal
  #       strings "neutral", "win32-arm", "win32-x86", "win64-arm64",
  #       "win64-ia64", or "win64-x64".  An empty string means that the
  #       associated entity does not require a specific platform.  Upon
  #       failure, a script error will be raised.  The return value is
  #       undefined.
  #       associated entity does not require a specific platform.  The
  #       varName argument is the name of a variable in the context of the
  #       immediate caller that will receive a modified platform name, if
  #       applicable.  Upon failure, a script error will be raised.  The
  #       return value is undefined.
  #
  proc verifyPlatform { platform varName } {
    #
    # NOTE: The platform name must be matched exactly and case-sensitively.
    #
    switch -exact -- $platform {
      "" {
        #
        # NOTE: The empty string means "attempt to automatically detect" the
        #       necessary platform based on context information that may be
        #       present in the context of the immediate caller.  If this is
        #       not possible, a script error will be raised.
        #
        upvar 1 language language
        # NOTE: This platform name is supported; however, the name needs
        #       to be normalized to "neutral".
        #
        # TODO: In the future, the empty string may mean "automatically
        #       detect" the necessary platform instead of always being
        #       mapped to "neutral".
        #

        if {![info exists language]} then {
          error "unable to detect language"
        }

        upvar 1 version version

        if {![info exists version]} then {
          error "unable to detect version"
        }

        upvar 1 packageName packageName

        if {[info exists packageName]} then {
          set localPackageName $packageName
        } else {
          set localPackageName ""
        }

        upvar 1 usePgp usePgp

        if {[info exists usePgp]} then {
          set localUsePgp $usePgp
        } else {
          set localUsePgp false
        }

        #
        # NOTE: Download the list of platforms associated with this package
        #       from the package repository server.  This may fail and raise
        #       a script error.
        #
        set platforms [downloadAllPlatforms \
            $language $version $localPackageName $localUsePgp]

        if {[string length $varName] > 0} then {
          upvar 1 $varName newPlatform; set newPlatform neutral
          upvar 1 $varName newPlatform
        }

        #
        # NOTE: Check the current platform and the neutral platform, in that
        #       order, to see if that platform is supported by the package
        #       being saught.  If so, return that platform.
        #
        foreach thisPlatform [list [getPlatform] neutral] {
          if {[lsearch -exact $platforms $thisPlatform] != -1} then {
            set newPlatform $thisPlatform
            return
          }
        }

        #
        # NOTE: If this point is reached, there are no supported platforms
        #       that are compatible with the current one for the specified
        #       package.
        #
        error "could not automatically detect platform"
      }
      neutral -
      win32-arm -
      win32-x86 -
      win64-arm64 -
      win64-ia64 -
      win64-x64 {
932
933
934
935
936
937
938






















































































939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958


959
960
961
962
963
964
965
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164


1165
1166
1167
1168
1169
1170
1171
1172
1173







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


















-
-
+
+







    } else {
      file delete -force -- $temporaryDirectory
    }

    return [expr {$compare > 0}]
  }

  #
  # NOTE: This procedure downloads a manitest from the package file server,
  #       writing its contents to the specified local file name.  It can also
  #       verify the OpenPGP signature.  The language argument must be one of
  #       the literal strings "eagle", "tcl", or "client".  The version
  #       argument must be one of the literal strings "8.4", "8.5", or "8.6"
  #       when the language is "tcl" -OR- the literal string "1.0" when the
  #       language is either "eagle" or "client".  The packageName argument
  #       is a directory name relative to the language and version-specific
  #       directory on the package file server and may be an empty string.
  #       The localFileName argument is the file name where the downloaded
  #       file should be written.  The usePgp argument should be non-zero
  #       when an OpenPGP signature needs to be verified for the downloaded
  #       file.
  #
  proc downloadAllPlatforms { language version packageName usePgp } {
    variable baseUri
    variable platformsUri
    variable platformsUrn
    variable temporaryRootDirectory

    set temporaryDirectory [file join \
        $temporaryRootDirectory [appendArgs \
        pkgd_plat_ [::PackageRepository::getUniqueSuffix]]]

    set localFileName [file join $temporaryDirectory manifest.txt]
    file mkdir [file dirname $localFileName]

    #
    # NOTE: First, build the final URI to download from the remote package
    #       repository.
    #
    set uri [subst $platformsUri]

    #
    # NOTE: Then, in one step, download the file from the package file
    #       server and write it to the specified local file.
    #
    writeFile $localFileName [getPackageFile $uri]

    #
    # NOTE: Is use of OpenPGP for signature verification enabled?  Also,
    #       did we just download an OpenPGP signature file?
    #
    if {$usePgp && [isOpenPgpSignatureFileName $localFileName true]} then {
      #
      # NOTE: Attempt to verify the OpenPGP signature.  If this fails,
      #       an error is raised.
      #
      if {![::PackageRepository::verifyOpenPgpSignature $localFileName]} then {
        error [appendArgs \
            "bad OpenPGP signature \"" $localFileName \"]
      }
    }

    #
    # NOTE: Initialize list of platforms to return.  This will be populated
    #       based on the platform directories available in the downloaded
    #       manfiest data.
    #
    set platforms [list]

    #
    # NOTE: Read the (OpenPGP verified) Fossil manifest data from the local
    #       file and split it into lines.
    #
    set data [readFile $localFileName]; set lines [split $data \n]

    foreach line $lines {
      if {[string range $line 0 1] eq "F "} then {
        set fileName [lindex [split $line " "] 1]

        if {[string match [file join \
            $language $version * $packageName *] $fileName]} then {
          set directory [lindex [file split $fileName] 2]

          if {[string length $directory] > 0} then {
            lappend platforms $directory
          }
        }
      }
    }

    return [lsort -unique $platforms]
  }

  #
  # NOTE: This procedure downloads a single file from the package file server,
  #       writing its contents to the specified local file name.  It can also
  #       verify the OpenPGP signatures.  When an OpenPGP signature file is
  #       downloaded, this procedure assumes the corresponding data file was
  #       already downloaded (i.e. since OpenPGP needs both to perform the
  #       signature checks).  The language argument must be one of the
  #       literal strings "eagle", "tcl", or "client".  The version argument
  #       must be one of the literal strings "8.4", "8.5", or "8.6" when the
  #       language is "tcl" -OR- the literal string "1.0" when the language
  #       is either "eagle" or "client".  The platform argument must be an
  #       empty string -OR- one of the literal strings "neutral", "win32-arm",
  #       "win32-x86", "win64-arm64", "win64-ia64", or "win64-x64".  An empty
  #       string means that the associated package does not require a specific
  #       platform.  The fileName argument is a file name relative to the
  #       language and version-specific directory on the package file server.
  #       The localFileName argument is the file name where the downloaded
  #       file should be written.  The usePgp argument should be non-zero when
  #       an OpenPGP signature file needs to be downloaded and verified for
  #       the downloaded file.
  #       the OpenPGP signature file needs to be verified for the downloaded
  #       file.
  #
  proc downloadOneFile {
          language version platform fileName localFileName usePgp } {
    variable baseUri
    variable downloadUri
    variable downloadUrn

Modified client/1.0/neutral/pkgd.eagle.asc from [5aece71259] to [a4a5c1129d].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJYErSKAAoJEFAslq9JXcLZ5EUP/0XCT6DuFTrXFd8DfZ7cXjgh
x4sE1noukUNCAox48A39jMWacX+PV/ugik938PwCfhycz+dx2RU+eqgW5uhRwP2d
TxAmB+nGAQPD8tzA9Rhyq5CM0SMcaCk8Irk1veRqYdxr9xvMOEr2gOn2jpgghpji
47JMDjrXRT55XBHXdT/+gBeCYzNj+NBiNO8pJyhLG6SF6rha0qRDs34l2CLkF9Rk
mBUriMtOnLAJAoNyXXXPxa6LNepBBk5btVri3Ni1NFbNW83XX4q63tHwUwADuQy5
fnbVrB5fnQwNobyCIX0YeWUacC28kSShLiOeryfCKyITJmkt/QwuyhVyTBgvpegU
ImYrMd0jZSiLeljJsgbbXlRMPoKOOowxFKEkF5re1fQW88b2BjJlsAIO4ubM6qW2
e33VertK+/aBu1g6VmMywy+Npp+lTLWEULPYsHWlqcFLI3A+u727ron0qGiKp+7R
9ukJNhw0FMixuE0f4N1/GRDAgm9VMDayUJfUlHttz55EbXSjcCD80D2vJW2jT4fA
WeYk3qLB9z3bvWt/KdUvO/31Efu4njAdE0H8NoJQ9HwHxXX/VJIoCqOjZ52Ub6ZQ
uA3JWO8otT/QjbSU+cc/XfeHPpzlnv5kzoX0vQwa1Nf35LNc6q6n1A383AeZi/Ku
yQ31+8S0voNpiEWdzJsq
=uj6D
iQIcBAABCAAGBQJYEtk1AAoJEFAslq9JXcLZcsQP/20OJlkj118yDCfCoR7Zyhnv
pOFCDXDnIq/ldclVELKg+EK/CrxgmCAH/+pDSLxTWT+/Y1BTTeQ8Kp7fO2IWCFVj
hoizNoUzqaDxYLqhy0FPwRKA0RvsS5VJGhJp8lC9/i8KLy3gjpxo/uMESOwKX+AW
NRbhOP+ngBfPYMnWdKGdjWCQSmGOL/8+DLffmk8VKpmtO4ZJDN4RAArvsrclA1JD
E8lSKq6VmlGeJyUxjMX8LK2RX25m8Pz3tzsDCfOkYW8NbAOAQTMhoRspoJe9J5O3
5Ldyx0QUR6RJNJfM6FfzGtsYowmV2n9J2jDWzaGB6f599EUBCu5q0r4gaceBU1CC
L8onojsxGxaa9gUF1NgLML3YopvW5KIx2ZGXP+GWvT44kOmOaM8hgJo6+arh7LfU
swQ9nhz1MeVrSbyS3408LHGcCEGzQrC5pNJeYgfE8GWp5jJuukxXkOSnfKhO9H7n
A5+WbHcIAz4qvgMUxDiREXbE8oBHQrt8BhtwPmW6HG9KOUS2oaS4oNJobC8+n2Xu
lzyrch7APqT7Wg5X572TL2A/e7OQO2MIpubr7vHso5C/t22XgMMZy3CVMeJqMLK6
Db5v70omu+ioKm2zrsDo7I7aRw+KpHJ+HWmF0mO1QsapHPSDZPUdZcLm8Sn55JRJ
h2tZ8pLujJP36P4qSX6N
=KcGx
-----END PGP SIGNATURE-----

Modified client/1.0/neutral/pkgd.eagle.harpy from [62b4c2cc70] to [02d7425114].

17
18
19
20
21
22
23
24

25
26
27

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66




































67
68
17
18
19
20
21
22
23

24
25
26

27
28
29
30




































31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68







-
+


-
+



-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


    THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED.
-->
<Certificate xmlns="https://eagle.to/2011/harpy"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Protocol>None</Protocol>
  <Vendor>Mistachkin Systems</Vendor>
  <Id>a6607832-9a24-45a8-bc82-12209d66f1ca</Id>
  <Id>5fdc11ef-e852-4689-a69f-af685136081a</Id>
  <HashAlgorithm>SHA512</HashAlgorithm>
  <EntityType>Script</EntityType>
  <TimeStamp>2016-10-28T02:14:10.5897969Z</TimeStamp>
  <TimeStamp>2016-10-28T04:50:36.5976094Z</TimeStamp>
  <Duration>-1.00:00:00</Duration>
  <Key>0x9559f6017247e3e2</Key>
  <Signature>
    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
  </Signature>
</Certificate>

Modified client/1.0/neutral/pkgd.eagle.harpy.asc from [cf7bbc4a40] to [bd034e58a0].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJYErSMAAoJEFAslq9JXcLZVSoP/0JKSJ+Wd+RO9CvCjEzlpWL0
dWkxv7HJHeir66bW0GJaCr+3v+wACyzLT4szqDb47KmP6zpHK/UPb1PO7ZY164LM
eLKc75+OlaQVmft0ArlvqLlG0s+GMJ1Af5SB0NTIJHGam6055d7v2BaMXs69wvD9
3wT25MuYuL5146ud1x4BkJxq46okDw2RCfHXolqqkMpGWB58dDKGgCwPRT//4ASF
2pwo+3U4JTj2eZUzUPes9OXU+nYbRx8YfokAFFivLvsqkKIVgvJA+CbNhJ7MNJg0
z/basbrdjkUiAYjiwW73AhvM+r4QT5lktlVEJIe/mwlmyav6aS7POiiZVsJTxgB7
KkvHeEvFB8DTfk1cC1syCXjq0XW+PhFVtUKAXYVYP+oX6aRpp4+YGzuE3Bp6Wc16
h0+d4YFXekvSRHu/nV6A4vEoun0DGL8zb39h5w1MlUc/rN0PuNw/RhcqcNatGY+k
viAWEEGQicacgUsJD3OrNogiLCGCOGdmnWQnEBnIpLzlKbjsmglm0pXn43DPCH6H
jFLI9faP62208wLUIRne1hXhKX5C2iC2ykcejo4dUDqmwqGdCACBSNBL9QOEYUsC
s/9RLNsks9P0k+ORlHzyt4XRJ7RcfeaBlor0+Z/DmVPJh4WHkPGFm2r0/cnN9RB/
r86Sk0dWyUy06FbHu87I
=G2d/
iQIcBAABCAAGBQJYEtk5AAoJEFAslq9JXcLZ77QQAJCkxCZcry3Ex59M+9OPefBE
D8kE4lZyaBUUWJOUdKMzn2d/J3f7PrnZh4+Jxt0CHBKZ7ITN2tt0XQCVT8eNEU+C
tTXstUNMl0Fn0SkpudDw8iu9GlssVdALvDlIDcTPbzATEjGzywzOYDEbpwlrcBhQ
iWQOXw3nGsU9LHHjpSGa7nPtUuJ6wwS0iEoFJ6dxUl2QIjEvEMueOMU7+pN94TkO
7ULOqVwcUj1QdtPW1TO9PRfWQJKt1Ivi9U+4kPyfH/gQtP7wrY6mZukZ80EbRoRi
BOm9zl+iSHVv9uLtfvgYJ83ViYLvRWBX+OjhVyxpSShBtp7W5jdTmiMRGRzHmVuc
dMu+pu6vBKZkp8gtXGlvBp014PHgvreUxhUdh+i0qfrCrXAp8NMtNlSXV2QolPAo
sRLCnh7gpu/SY3/RqsiKPPA3aJ8bJV/cuWuQn4gHMQqSO2BfjrEytBjs9ltxaQKu
4wZhOQdWEYGmjuF+bXJwS1LvjDyBtV2JanDWgOMhn61HvU0wfs7pVyLMFmTmBZwX
jt/PwD3qiShHKPPZsgRHxM7/MmzdaC1CWHZa3MFdm2sovON6YueaVyuMZls7jzaO
X0iTC0KtJUI+eaD58UZS9laGRkTMWbPrWxac0EKZq54l+xyx5Po+LkZL7rCtzGgd
4ZkMeGBx2HDmVYcJQrlA
=29wH
-----END PGP SIGNATURE-----

Modified client/1.0/neutral/pkgr.eagle from [2390687eb3] to [132b4f6495].

1596
1597
1598
1599
1600
1601
1602








1603

1604
1605
1606
1607
1608
1609
1610
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610

1611
1612
1613
1614
1615
1616
1617
1618







+
+
+
+
+
+
+
+
-
+







    global tcl_platform

    if {[string length $script] == 0 || \
        ![file exists $script] || ![file isfile $script]} then {
      return
    }

    set prefixes [list]

    if {[info exists tcl_platform(user)]} then {
      lappend prefixes $tcl_platform(user)
    }

    lappend prefixes ""

    foreach prefix [list $tcl_platform(user) ""] {
    foreach prefix $prefixes {
      if {[string length $prefix] > 0} then {
        set prefix [appendArgs . $prefix]
      }

      set fileName [appendArgs \
          [file rootname $script] .settings $prefix [file extension \
          $script]]

Modified client/1.0/neutral/pkgr.eagle.asc from [d00499e8ad] to [600e52e963].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJYEozaAAoJEFAslq9JXcLZXBYP/jix4vbRC7x4EMdHpQ6zBxHf
FCR4EZg6YvXEkHrRGMUFstk1MFeZ5Acc1Iwx57ZF8IhIGrPApe3eE3J5x8v+rlPe
pe8uxJd0sLuIYt23NSIX/ZgIJ4UNBTbmmPpniEJ6+Oa2uWK/ecdtAgNuGGXamKMI
5K8v1WpDfg34kJtLycVLndsZoX6e0rZETkJG9RHwxBLSxYQYEICy6WqlyvNepdAA
2/0GL1FA1BawnNKrxm1uivFIFiMEGyuTKBves9Rvg4EF3FbukngDvgnzlnPQ79h7
BKXyWDAwmWLhsaKcQcD4mow6uenp1DRExjOpg7TuYCTUYMBBvbKBNKkMLqsd14uw
ZFgcJSzFO6lZR3sfC1rGNzRomvy70tuDEg2NpZMfmyQpKsNbWk2J/m/nReSUG9eJ
RpR85MEmhMcU/5QCSB3J6TY3s5iZzjsPLq04JC7w62VsSfKKFDRP2Tcnmc4ri5sK
cXOSefJzU1sLj9biXYhZumxv3Bd1iuDBdkBiZj4r05OPaZJV0IcVFU3Aj8x3PVEs
QscBZepaVL0ubXk+YgfnjDFC7CL8Eda9OIwl4zaxKkdKERvRnZDPjBUOJcNmHzkL
NNF35XTVp6RTM143oogHsL3PWT/3VjqLV+fjKgwei8qGuPrOEWuLUVPomtX+qMbS
TlfsGkBnfYRc7cCB55T0
=9Jjy
iQIcBAABCAAGBQJYEtS+AAoJEFAslq9JXcLZGX0P/2xZOWZqH3yuOu+DrzJ7Nsnj
BnMN+pZ2qtNAsyTNFTwJYjKHhGLwk3V9XlHwsBebblTT48OrtLz8yZpZDBkVk9/0
sgXI8gbUp7Eivv+f47zAIhJ2Qfykc8tIANyF1Q/AA2k1Aen+DD9ZJbtqqKorblbt
izQJ8dIW72Sfrv17WZx7D0w2mmUcSFfb22/+nJ7GhlHmh39KW0IMilG1qtThJJai
62rknx8X6rG3GUGy/CgZYzKwPwQY366CAEfv/N+IafmVPfhstMVHHt5+pVuTvNTs
PkzBZdfFX2SUz57dIdbI5xk704ojXUIxoygFVaeS7HFAW4wa97niqoi5p5/1GFCe
apw+rEvCBbbw2daXuieison8fqNYl5pTIMwesACrXbwadTuPRA24KhnruLu22xE+
NbEH3OUKRo4ol/HCLIC2avlGrixrjnxG0itkMkSG4pvrwTCfFz0XMUiTGKC8OZZj
OHo4wkLWg/SzCOAXWhphXkHvRDdBjAfbqBXCn7lG3Q9LIX+GUBu4Nc7F4cZHBGQF
kXJs441GeSvr/j3PpgacZBawg06sgpdpy+GGsB0lgdBGGYiWdYWbsnJF5F7WJRcC
GL2/F3b5IMAr3Lv3/3+ItFFWHuTH2KRqeXlnF09PIUST0PRFs28fnsQY61bwsORC
hfhA9cC/Vimsr4zCEDMH
=4fzG
-----END PGP SIGNATURE-----

Modified client/1.0/neutral/pkgr.eagle.harpy from [ba9aae3011] to [2280aea880].

17
18
19
20
21
22
23
24

25
26
27

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66




































67
68
17
18
19
20
21
22
23

24
25
26

27
28
29
30




































31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68







-
+


-
+



-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


    THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED.
-->
<Certificate xmlns="https://eagle.to/2011/harpy"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Protocol>None</Protocol>
  <Vendor>Mistachkin Systems</Vendor>
  <Id>a5a5aa95-b6d6-4339-a05e-e9ac0515504c</Id>
  <Id>659beaa3-cb16-4af3-b230-95b60e9aeb3f</Id>
  <HashAlgorithm>SHA512</HashAlgorithm>
  <EntityType>Script</EntityType>
  <TimeStamp>2016-10-27T23:24:53.9657735Z</TimeStamp>
  <TimeStamp>2016-10-28T04:31:35.4159688Z</TimeStamp>
  <Duration>-1.00:00:00</Duration>
  <Key>0x9559f6017247e3e2</Key>
  <Signature>
    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
  </Signature>
</Certificate>

Modified client/1.0/neutral/pkgr.eagle.harpy.asc from [83b3014d91] to [d96d71386d].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJYEozbAAoJEFAslq9JXcLZH+UQAK4LOLvYBgmYOfkkDvqz7d+2
tFkp9O5tq19uBmkCDrSH9TRlNjzJG7gR3xL/0LNbr7mcVVas07/m2x8OFaEjGxT6
b14GTFwWM3Dw910HI9Bq3zJrmeTMfBoB3mNGbal31jMnRIKkxTSZR/ZsTKfHEXkU
2C1c3HU2KkSdn3zWkN2n+CHJz+GmFGwnu0dx4gEzDIT1XZkC3mYBrRjc4rVBTK7O
MnSznnLVMtf2tydu6MS/kfHM1+tkK20SVvy9vHlYTNBcKeOrIArzXhzMCRDn434D
gBYr/iRdrJ2AZTA0urw/Vy6vTVcv2Sk4ANakszzhAj4Gy2Cs4llZaKClEGC4jFrA
8t2oHJXEEltprj+Tl+aAxofNfFvyM4MixmH7vK2LdPYbf2RXT3mwiSs4HsVw46WW
Uah3NPRRjl6w2NfKS9yeDy/8VV+7s107DEs6G8Ewx9Tromy/JFYj4M72umurz/yj
bqn8IlxZjclfNP7S1v58TKnN5zgOD/ptdiOZ9KbC/DswGSsEhhaCT5PF//ea8DY/
KjciwB1RKS5BbMRRUyQjJx1tjo7svdZcSVuibBsUaJ1dXrdNzPWirE88MYeZpSYC
mEV0VT7P4RtCXiGFJ0UOP2hIL/MjLpw6oGBRdKJDcUtlvChHnL7d7+juZsrMOJtA
dd0OT4qIFZJr/SGABW8+
=Q3U3
iQIcBAABCAAGBQJYEtTAAAoJEFAslq9JXcLZCpsP/R8RQKMtThto29k0xhWmXHdv
1IP4B+tvjMQtKPe+DiO+LoiiiYJyn0OMPSyi/gDk73LeJKVMSp3ftVyshuHa9PUL
dvCvyr+hcOivOzqDX3k6fpXqZoI8ZwYP0QBQRPzElYKFM+pOA+m/BkZIdSnZ4Lay
k5mWdELTvPIaCTNixJ4nFi2XYbnpS19Z6kUojvGAy/BVLPTYpfUGieHBP1aov4df
hHEQdgSK6iLZLcfveC0T+YnWjtBpVjZGjxb/3Bvs6MBrZk9JBLL4ppMLEw7xmolC
ttKx2FMeaSfHOTHAfcy+KrSh9Sji6/cQAIUkSwZWkpzGkaCkiEK0kNZDpN41rt8e
yW8iQWYNmiWaivYpfwHWIoxVQTfKfyXZk6FEFowMcU1W5dBAsWh7YAcQ+Hat+coY
T706IJey+lN035MoIeVICyMCaXVLtCZmKGXMCv1ssddZRhrL6OhB7lJmYDKkDqYN
CTH2559BXm1Tv1yO6Af9nL4VWkJmqnlyqWaVXTU4AVC8BY1WVO4uYGEP8DZ/Kvii
glQgc79bnJHiYicr33yOC1/BsGnH5m4DKKwS+ZiAEA/lqIfwYxzALkJrb9hnyIB4
sXwZzGHA79lmO5o3WRgSp/WhB698+5pLKeckMqB6joUlOMzE3cC0RJF8kzpUs60n
WoTVOH4TFvU30uFcVIei
=lRxs
-----END PGP SIGNATURE-----