diff --git a/coverage.txt b/coverage.txt index 2acd0d9..11ed75c 100644 --- a/coverage.txt +++ b/coverage.txt @@ -1,477 +1,1715 @@ mode: atomic -github.com/jesseduffield/lazydocker/pkg/commands/service.go:23.62,25.24 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/service.go:29.2,30.76 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/service.go:25.24,27.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/service.go:34.70,36.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/service.go:39.32,46.2 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/service.go:49.35,56.2 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/service.go:59.47,61.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/service.go:64.61,66.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/service.go:69.49,80.2 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/service.go:83.47,91.2 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/volume.go:24.61,26.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/volume.go:29.48,31.16 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/volume.go:35.2,39.42 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/volume.go:43.2,43.33 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/volume.go:54.2,56.12 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/volume.go:31.16,33.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/volume.go:39.42,41.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/volume.go:43.33,52.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/volume.go:60.46,63.2 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/volume.go:66.43,68.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:150.68,156.23 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:159.2,159.14 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:156.23,158.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:163.66,166.23 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:169.2,169.14 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:166.23,168.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:173.64,175.23 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:178.2,182.34 4 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:190.2,195.16 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:199.2,207.22 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:175.23,177.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:182.34,184.17 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:187.3,187.78 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:184.17,186.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:195.16,197.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:211.83,216.38 4 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:248.2,249.21 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:253.2,260.8 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:216.38,218.17 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:221.3,222.17 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:225.3,225.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:235.3,235.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:245.3,245.23 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:218.17,220.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:222.17,224.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:225.25,226.14 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:226.14,228.5 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:228.10,229.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:229.25,231.6 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:235.25,236.14 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:236.14,238.5 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:238.10,239.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:239.25,241.6 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:249.21,251.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:264.49,268.25 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:269.15,270.16 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:271.15,272.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:273.13,274.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:275.13,276.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:277.11,278.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:279.14,280.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:281.14,282.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:283.12,284.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:285.14,286.35 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:287.10,290.40 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:290.40,293.4 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:293.9,293.48 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:293.48,297.4 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:297.9,299.4 1 0 +mode: atomic +mode: atomic +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:341.36,343.16 2 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:343.16,344.13 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:347.2,462.3 1 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:479.157,481.16 2 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:481.16,483.3 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:485.2,486.16 2 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:486.16,488.3 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:491.2,491.27 1 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:491.27,493.3 1 2 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:495.2,507.23 2 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:510.67,512.24 2 8 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:512.24,514.3 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:515.2,516.32 2 8 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:519.43,521.67 2 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:521.67,523.3 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:524.2,525.24 2 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:528.64,532.16 3 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:532.16,534.3 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:536.2,536.20 1 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:539.72,543.2 2 4 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:545.78,548.45 2 6 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:548.45,549.25 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:549.25,551.18 2 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:551.18,553.5 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:554.4,554.16 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:555.9,557.4 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:560.2,561.16 2 6 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:561.16,563.3 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:565.2,565.54 1 6 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:565.54,567.3 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:569.2,569.18 1 6 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:576.83,578.16 2 2 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:578.16,580.3 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:582.2,582.49 1 2 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:582.49,584.3 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:586.2,587.16 2 2 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:587.16,589.3 1 0 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:591.2,591.49 1 2 +github.com/jesseduffield/lazydocker/pkg/config/app_config.go:595.45,597.2 1 4 +github.com/jesseduffield/lazydocker/pkg/config/config_default_platform.go:7.42,12.2 1 4 +mode: atomic +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:29.50,31.54 2 3 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:31.54,33.3 1 2 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:34.2,35.31 2 1 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:35.31,37.3 1 1 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:38.2,38.14 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:42.50,44.33 2 8 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:44.33,46.3 1 1 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:47.2,47.61 1 7 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:52.71,54.37 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:54.37,56.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:57.2,58.41 2 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:67.43,68.46 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:68.46,70.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:71.2,73.36 3 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:73.36,78.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:79.2,79.38 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:79.38,84.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:85.2,85.38 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:85.38,90.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:91.2,91.38 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:91.38,96.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:97.2,97.30 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:102.79,105.2 2 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:109.66,111.2 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:114.44,118.2 3 4 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:121.22,127.2 5 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:130.79,131.36 1 7 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:131.36,133.3 1 5 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:134.2,134.12 1 7 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:138.24,139.11 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:139.11,141.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:142.2,142.10 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:146.59,147.28 1 3 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:147.28,149.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:150.2,150.41 1 3 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:150.41,152.3 1 1 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:154.2,157.54 3 2 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:161.36,164.2 2 16 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:166.50,167.31 1 5 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:167.31,169.3 1 2 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:170.2,171.27 2 3 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:171.27,172.40 1 4 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:172.40,174.43 2 8 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:174.43,176.5 1 4 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:179.2,179.18 1 3 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:182.81,184.43 2 3 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:184.43,185.28 1 6 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:185.28,186.12 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:188.3,188.38 1 6 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:188.38,190.4 1 6 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:191.3,191.57 1 6 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:193.2,193.29 1 3 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:198.57,199.39 1 5 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:199.39,200.43 1 10 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:200.43,202.4 1 2 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:204.2,204.13 1 3 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:207.38,210.29 3 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:210.29,211.26 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:211.26,213.4 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:213.9,215.22 2 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:215.22,217.5 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:218.4,218.14 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:221.2,221.16 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:224.39,227.29 3 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:227.29,228.26 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:228.26,230.4 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:230.9,232.22 2 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:232.22,234.5 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:235.4,235.14 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:238.2,238.16 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:241.59,245.2 3 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:248.52,264.13 3 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:264.13,266.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:267.2,267.27 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:271.52,286.13 3 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:286.13,288.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:289.2,289.22 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:293.38,295.29 2 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:295.29,297.22 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:297.22,299.4 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:301.2,301.33 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:305.65,307.2 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:310.57,311.17 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:311.17,313.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:315.2,318.21 3 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:318.21,320.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:321.2,322.27 2 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:322.27,324.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:326.2,326.15 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:331.34,334.24 3 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:334.24,336.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:337.2,337.19 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:340.43,342.28 2 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:342.28,344.17 2 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:344.17,346.4 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:348.2,348.19 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:348.19,350.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:351.2,351.12 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:354.49,355.22 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:355.22,357.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:357.8,359.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:362.37,363.32 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:363.32,365.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:367.2,367.17 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:367.17,369.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:371.2,371.29 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:371.29,372.15 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:373.117,374.12 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:375.11,376.16 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:380.2,380.13 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:384.40,386.2 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:390.56,392.2 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:394.73,397.16 2 3 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:397.16,399.3 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:400.2,400.16 1 3 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:401.14,402.23 1 1 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:403.14,406.63 2 1 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:406.63,408.4 1 0 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:409.3,409.34 1 1 +github.com/jesseduffield/lazydocker/pkg/utils/utils.go:410.10,411.86 1 1 +mode: atomic +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:20.51,22.36 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:22.36,23.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:23.26,25.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:27.2,27.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:30.55,38.2 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:40.50,41.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:41.26,43.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:44.2,45.39 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:45.39,47.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:48.2,48.23 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:52.70,53.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:53.12,56.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:56.16,58.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:60.3,60.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:60.13,63.23 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:63.23,65.24 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:65.24,67.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:68.5,68.75 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:68.75,70.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:74.3,74.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:74.29,75.42 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:75.42,77.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/app_status_manager.go:81.2,81.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:16.110,20.52 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:20.52,22.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:24.2,28.18 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:28.18,30.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:32.2,34.21 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:34.21,36.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:38.2,64.60 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:67.51,76.68 5 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:76.68,79.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:79.8,80.42 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:80.42,82.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:82.9,82.49 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:82.49,84.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:87.2,87.45 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:90.95,93.24 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:93.24,100.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:102.2,102.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:102.29,113.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:115.2,129.15 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:132.42,133.100 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:133.100,135.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:137.2,137.83 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:137.83,139.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:142.75,146.80 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:146.80,147.55 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:147.55,148.31 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:148.31,153.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:153.10,158.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:161.3,161.76 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:161.76,163.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:165.8,165.25 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:165.25,167.66 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:167.66,168.59 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:168.59,173.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:175.4,175.21 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:178.3,183.76 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:183.76,185.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:186.8,188.19 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:188.19,190.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:192.3,192.62 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:192.62,193.31 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:193.31,198.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:198.10,203.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:206.3,206.76 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/arrangement.go:206.76,208.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:16.127,17.49 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:17.49,18.55 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:18.55,20.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:22.3,22.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:22.22,23.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:23.41,25.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:28.3,28.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:32.49,33.42 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:33.42,35.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:36.2,38.12 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:41.76,45.10 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:45.10,46.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:46.30,48.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:49.8,51.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:52.2,52.18 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:55.95,63.2 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:65.106,68.16 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:68.16,70.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:71.2,72.54 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:75.86,79.16 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:79.16,81.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:82.2,83.15 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:83.15,85.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:86.2,88.40 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:88.40,90.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:91.2,91.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:94.35,97.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:102.133,104.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:106.142,108.40 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:108.40,109.46 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:109.46,110.56 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:110.56,112.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:114.3,115.17 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:115.17,117.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:118.3,119.69 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:119.69,121.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:122.3,122.59 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:124.2,124.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:127.116,129.135 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:129.135,131.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:132.2,132.124 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:132.124,134.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:136.2,136.131 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:136.131,138.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:139.2,139.122 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:139.122,141.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:143.2,143.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:146.56,150.2 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/confirmation_panel.go:152.51,158.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:19.89,21.64 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:21.64,23.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:26.41,26.64 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:32.127,34.15 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:34.15,36.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:38.2,40.73 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:40.73,42.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:46.2,48.6 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:48.6,49.10 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:50.21,51.10 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:52.19,54.18 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:54.18,58.5 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:59.4,59.28 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:59.28,61.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:66.67,71.12 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:71.12,75.3 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:77.2,77.40 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:77.40,80.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:82.2,82.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:82.15,83.40 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:83.40,85.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:88.2,88.74 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:88.74,91.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:93.2,93.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:96.34,97.50 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:97.50,101.41 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:101.41,103.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:107.112,116.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:116.16,118.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:120.2,120.63 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:120.63,122.17 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:122.17,124.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:125.8,127.17 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:127.17,129.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/container_logs.go:132.2,132.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:22.81,24.68 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:24.68,25.54 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:25.54,27.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:29.3,29.98 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:29.98,31.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:34.2,36.62 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:36.62,64.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:65.71,72.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:82.65,84.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:85.52,89.89 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:89.89,91.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:93.4,93.80 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:93.80,95.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:97.4,97.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:109.89,110.16 1 7 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:110.16,112.3 1 3 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:114.2,116.29 3 4 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:116.29,118.3 1 1 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:120.2,120.80 1 3 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:123.82,124.53 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:124.53,124.91 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:127.68,128.32 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:128.32,130.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:132.2,132.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:132.44,134.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:136.2,136.90 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:136.90,140.24 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:140.24,142.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:143.3,146.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:149.2,150.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:150.16,153.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:155.2,155.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:158.85,159.53 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:159.53,159.97 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:162.74,163.32 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:163.32,165.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:167.2,177.39 10 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:177.39,179.50 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:179.50,180.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:180.30,182.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:182.10,184.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:186.8,188.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:190.2,191.54 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:191.54,193.61 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:193.61,194.27 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:194.27,196.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:198.8,200.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:202.2,203.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:203.16,205.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:207.2,209.15 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:212.84,214.64 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:214.64,216.18 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:216.18,218.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:220.4,220.36 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:223.41,223.64 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:229.82,231.64 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:231.64,233.18 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:233.18,235.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:237.4,237.36 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:240.41,240.64 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:246.54,247.33 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:247.33,250.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:253.2,260.16 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:260.16,262.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:264.2,268.23 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:268.23,269.63 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:269.63,270.40 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:270.40,271.37 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:271.37,272.11 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:274.5,275.34 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:280.2,280.42 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:283.53,284.46 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:284.46,285.60 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:285.60,287.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:290.2,290.61 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:290.61,292.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:294.2,294.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:297.80,301.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:303.79,305.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:305.16,307.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:309.2,309.82 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:309.82,310.68 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:310.68,311.58 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:311.58,312.63 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:312.63,313.132 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:313.132,314.72 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:314.72,317.8 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:320.5,320.45 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:322.4,322.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:326.2,329.31 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:329.31,329.95 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:333.31,333.114 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:337.2,340.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:343.69,344.72 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:344.72,345.37 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:345.37,347.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:347.9,349.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:351.3,351.17 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:351.17,353.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:355.3,355.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:359.73,361.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:361.16,363.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:365.2,365.38 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:368.72,370.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:370.16,372.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:374.2,374.115 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:374.115,375.68 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:375.68,376.43 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:376.43,378.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:380.4,380.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:385.75,387.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:387.16,389.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:391.2,391.69 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:391.69,392.45 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:392.45,394.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:396.3,396.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:400.74,402.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:402.16,404.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:406.2,407.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:407.16,409.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:411.2,411.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:414.47,415.124 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:415.124,416.67 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:416.67,418.18 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:418.18,420.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:421.4,421.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:426.76,428.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:428.16,430.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:432.2,434.12 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:437.78,439.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:439.16,441.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:443.2,443.42 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:446.73,456.2 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:458.82,460.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:460.16,462.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:464.2,470.67 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:473.46,474.123 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:474.123,475.68 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:475.68,476.71 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:476.71,477.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:477.44,479.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:482.4,482.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:487.48,488.125 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:488.125,489.68 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:489.68,490.71 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:490.71,491.93 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:491.93,493.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:496.4,496.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:501.80,521.2 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:524.89,526.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:526.16,528.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:530.2,530.46 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:533.77,535.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:535.41,537.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:539.2,540.19 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:540.19,542.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:543.2,544.21 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:544.21,546.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/containers_panel.go:547.2,548.37 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:12.154,13.96 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:13.96,16.27 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:16.27,17.39 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:17.39,19.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:21.4,22.21 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:22.21,24.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:27.4,27.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:27.22,29.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:31.4,31.61 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:31.61,32.69 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:32.69,34.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:35.5,35.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:39.3,45.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:48.2,51.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:54.124,56.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/custom_commands.go:58.122,60.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:9.42,11.9 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:11.9,13.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:15.2,15.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:15.30,17.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:19.2,22.42 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:25.55,29.2 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:31.169,32.78 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:32.78,34.14 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:34.14,35.73 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:35.73,37.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:39.3,39.17 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:43.44,44.42 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:44.42,46.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:48.2,48.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:51.37,58.18 6 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:58.18,60.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:62.2,64.29 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:68.38,69.35 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:69.35,70.43 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:70.43,72.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:75.2,75.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/filtering.go:78.39,80.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:8.53,9.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:9.14,11.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:13.2,14.8 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:14.8,16.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:18.2,18.18 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:19.22,20.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:21.14,23.13 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:24.16,25.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:26.10,27.59 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:32.56,37.2 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:39.59,43.64 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:43.64,45.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:47.2,49.49 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:49.49,51.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:53.2,55.106 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:55.106,56.43 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:56.43,58.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:62.2,62.40 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:62.40,64.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:66.2,66.36 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:69.37,73.35 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:73.35,75.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:77.2,79.16 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:79.16,81.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:83.2,83.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:86.55,90.89 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:90.89,92.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:96.39,99.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:99.22,100.90 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:100.90,102.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:106.2,106.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:106.44,108.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:111.2,111.89 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:111.89,113.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:115.2,115.57 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:119.48,123.53 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:123.53,124.65 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:124.65,126.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:129.2,129.39 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:132.46,137.39 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:137.39,140.49 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:140.49,142.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/focus.go:145.2,145.39 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gocui.go:25.52,26.32 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gocui.go:26.32,29.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gocui.go:31.2,32.13 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gocui.go:32.13,34.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gocui.go:35.2,35.27 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gocui.go:39.51,41.27 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gocui.go:41.27,43.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gocui.go:44.2,44.18 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:118.189,147.2 5 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:149.45,157.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:159.72,161.12 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:161.12,164.22 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:164.22,165.34 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:165.34,167.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:169.4,169.18 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:175.29,180.16 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:180.16,182.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:183.2,186.50 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:186.50,188.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:190.2,194.65 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:194.65,196.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:198.2,198.45 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:198.45,200.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:202.2,205.12 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:205.12,206.34 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:206.34,207.18 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:207.18,208.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:210.4,210.58 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:210.58,213.13 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:215.4,215.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:219.2,221.45 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:221.45,223.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:224.2,224.52 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:224.52,226.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:229.2,231.42 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:231.42,233.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:235.2,235.32 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:235.32,238.17 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:238.17,240.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:242.3,242.47 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:242.47,244.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:247.2,253.12 5 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:253.12,261.3 5 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:263.2,264.26 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:264.26,266.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:267.2,267.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:270.29,280.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:282.48,284.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:286.27,287.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:287.12,288.46 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:288.46,290.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:292.2,292.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:292.12,293.60 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:293.60,295.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:297.2,297.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:297.12,298.45 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:298.45,300.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:302.2,302.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:302.12,303.46 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:303.46,305.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:307.2,307.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:307.12,308.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:308.44,310.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:314.70,317.29 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:317.29,318.17 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:318.17,320.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:321.3,322.30 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:325.1,326.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:326.6,329.21 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:329.21,330.11 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:331.22,332.11 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:333.26,335.19 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:336.12,345.19 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:349.3,349.7 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:349.7,350.11 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:351.22,352.11 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:353.34,359.62 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:360.26,362.19 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:369.47,371.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:373.38,375.21 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:375.21,377.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:378.2,378.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:378.26,379.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:379.41,381.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:383.2,383.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:386.57,387.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:387.41,388.102 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:388.102,390.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:392.2,392.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:397.32,398.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:398.29,400.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:402.2,402.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:405.65,406.18 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:406.18,408.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:410.2,411.29 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:411.29,413.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:414.2,414.76 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:417.49,419.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:419.16,421.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:423.2,423.31 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:426.49,427.57 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:427.57,429.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:430.2,430.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:433.72,434.98 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:434.98,437.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:440.48,441.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:441.44,443.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:445.2,446.13 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:449.51,450.46 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:450.46,452.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:453.2,453.21 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:456.42,458.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:460.40,461.38 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:461.38,461.52 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:464.60,469.6 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:469.6,470.10 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:471.21,472.10 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:473.19,474.71 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:474.71,475.35 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:475.35,477.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:486.32,488.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:488.16,489.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:491.2,493.45 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:493.45,494.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/gui.go:497.2,497.17 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:21.73,26.58 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:26.58,34.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:35.63,37.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:45.57,46.50 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:46.50,48.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:50.4,50.50 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:50.50,52.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:54.4,54.24 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:54.24,56.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:58.4,58.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:58.22,60.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:62.4,62.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:68.77,70.32 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:70.32,70.68 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:76.62,86.16 9 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:86.16,88.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:90.2,92.15 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:95.38,96.49 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:96.49,98.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:100.2,100.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:103.44,105.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:105.16,107.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:109.2,111.12 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:114.55,115.79 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:115.79,117.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:119.2,119.32 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:122.75,130.16 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:130.16,132.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:134.2,160.86 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:160.86,166.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:166.26,167.62 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:167.62,169.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:171.5,171.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:176.2,179.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:182.43,183.120 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:183.120,184.67 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:184.67,186.18 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:186.18,188.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:189.4,189.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:194.78,196.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:196.16,198.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:200.2,206.67 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/images_panel.go:209.76,221.2 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:21.35,24.22 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:25.12,26.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:27.17,28.31 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:32.2,32.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:33.10,34.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:35.10,36.17 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:37.10,38.17 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:39.13,40.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:41.13,42.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:43.13,44.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:45.13,46.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:47.13,48.16 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:49.13,50.16 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:53.2,53.31 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:57.52,514.44 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:514.44,523.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:525.2,525.112 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:525.112,535.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:537.2,537.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:537.44,539.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:541.2,543.44 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:543.44,567.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:569.2,569.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:569.44,570.32 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:570.32,578.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:581.2,581.17 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:584.49,587.35 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:587.35,588.107 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:588.107,590.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:593.2,593.73 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:593.73,595.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:597.2,597.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:600.73,601.49 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/keybindings.go:601.49,603.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:10.59,12.34 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:12.34,14.45 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:14.45,16.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:18.3,18.67 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:18.67,22.4 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:23.3,23.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:27.39,29.37 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:29.37,31.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:32.2,32.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:35.65,36.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:36.14,38.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:40.2,40.39 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:40.39,42.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:45.2,47.40 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:50.40,51.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:51.14,53.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:55.2,57.42 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:61.44,69.89 5 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:69.89,73.17 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:73.17,75.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:77.3,77.10 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:77.10,85.4 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:87.3,88.17 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:88.17,90.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:91.3,101.19 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:104.2,104.57 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:104.57,106.58 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:106.58,108.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:115.2,115.39 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:118.52,119.17 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:119.17,121.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:123.2,124.8 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:124.8,126.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/layout.go:129.67,133.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:9.38,15.2 5 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:17.40,23.49 5 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:23.49,26.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:28.2,29.36 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:29.36,31.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:33.2,33.74 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:36.67,42.2 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:44.68,50.30 5 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:50.30,51.43 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:51.43,53.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:56.2,57.43 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:57.43,59.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:61.2,61.74 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:64.67,67.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:69.66,74.2 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:76.52,81.9 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:81.9,83.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:85.2,86.40 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:89.68,94.2 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:96.67,99.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:101.41,102.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:102.29,104.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:106.2,108.34 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:108.34,110.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/main_panel.go:112.2,112.40 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:16.71,27.28 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:27.28,29.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:38.61,39.46 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:39.46,41.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:43.2,43.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:43.29,45.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:47.2,47.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:50.41,52.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:52.16,54.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:56.2,56.42 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:59.52,60.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:60.22,64.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:64.26,66.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:70.2,72.34 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:72.34,73.31 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:73.31,75.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:77.3,77.21 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:77.21,79.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:81.3,81.67 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:84.2,84.34 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:84.34,85.45 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:85.45,89.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:92.2,95.55 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:95.55,97.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:99.2,102.40 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:107.43,114.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:116.41,121.47 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:121.47,122.43 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:122.43,124.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:129.3,129.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/menu_panel.go:132.2,132.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:18.77,21.60 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:21.60,29.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:30.67,32.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:43.61,45.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:50.79,51.53 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:51.53,51.93 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:54.68,67.41 12 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:67.41,69.48 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:69.48,71.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:72.8,74.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:76.2,80.15 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:83.40,84.51 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:84.51,86.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:88.2,88.43 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:91.46,93.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:93.16,95.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:97.2,99.12 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:102.77,104.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:104.16,106.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:108.2,120.88 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:120.88,123.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:123.26,124.70 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:124.70,125.45 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:125.45,127.7 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:128.6,128.16 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:134.2,137.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:140.45,141.122 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:141.122,142.67 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:142.67,144.18 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:144.18,146.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:147.4,147.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:152.80,154.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:154.16,156.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:158.2,164.67 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/networks_panel.go:167.78,179.2 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:10.55,15.35 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:15.35,16.58 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:16.58,17.28 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:18.12,19.53 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:20.18,21.51 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:27.2,27.25 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:27.25,29.36 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:29.36,30.59 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:30.59,31.48 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:31.48,33.47 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:33.47,34.50 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:34.50,35.18 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:38.6,38.52 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:46.2,47.49 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:50.76,51.32 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:51.32,53.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:55.2,55.88 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:55.88,58.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:58.26,59.27 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:59.27,61.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:63.5,63.33 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/options_menu_panel.go:68.2,72.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels.go:5.45,7.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:22.76,25.60 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:25.60,26.49 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:26.49,44.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:46.5,52.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:54.67,56.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:66.61,68.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:75.40,78.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:80.41,82.46 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:82.46,83.66 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:83.66,85.53 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:85.53,87.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:91.2,91.20 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:94.74,95.53 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:95.53,95.80 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:98.37,113.2 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:115.74,119.35 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:119.35,135.14 7 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:135.14,137.51 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:137.51,139.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:142.4,142.18 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:147.86,148.53 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:148.53,150.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:153.69,155.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:157.69,159.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:161.31,172.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:175.70,177.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:177.16,179.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/project_panel.go:181.2,181.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:20.77,23.60 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:23.60,51.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:52.67,53.33 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:53.33,55.6 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:56.5,56.107 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:66.61,67.48 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:67.48,69.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:71.4,71.48 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:71.48,73.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:75.4,75.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:78.21,80.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:84.88,85.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:85.30,86.54 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:86.54,86.83 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:89.2,89.53 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:92.85,93.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:93.30,94.54 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:94.54,94.83 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:97.2,97.50 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:100.78,101.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:101.30,102.54 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:102.54,102.83 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:105.2,105.52 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:108.76,110.64 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:110.64,112.18 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:112.18,114.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:116.4,116.36 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:119.41,119.64 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:125.77,126.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:126.30,127.54 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:127.54,127.93 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:130.2,130.57 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:139.54,141.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:143.76,145.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:145.16,147.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:149.2,162.82 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:162.82,165.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:165.26,166.70 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:166.70,167.69 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:167.69,169.7 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:171.6,171.16 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:177.2,180.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:183.71,185.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:185.16,187.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:188.2,188.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:188.30,190.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:192.2,192.46 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:195.70,197.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:197.16,199.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:201.2,201.113 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:201.113,202.68 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:202.68,203.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:203.41,205.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:207.4,207.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:212.68,214.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:214.16,216.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:218.2,218.72 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:218.72,219.38 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:219.38,221.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:223.3,223.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:227.73,229.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:229.16,231.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:233.2,233.69 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:233.69,234.43 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:234.43,236.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:238.3,238.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:242.71,244.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:244.16,246.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:248.2,248.67 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:248.67,249.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:249.41,251.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:253.3,253.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:257.72,259.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:259.16,261.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:263.2,263.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:263.30,265.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:267.2,268.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:268.16,270.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:272.2,272.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:275.82,277.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:277.16,279.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:281.2,282.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:282.16,284.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:286.2,286.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:289.68,290.118 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:290.118,296.73 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:296.73,297.59 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:297.59,299.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:300.4,300.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:305.70,320.26 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:320.26,321.69 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:321.69,322.66 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:322.66,324.7 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:325.6,325.16 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:332.26,333.69 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:333.69,334.77 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:334.77,336.7 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:337.6,337.16 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:343.2,343.82 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:343.82,348.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:350.2,353.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:356.77,358.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:358.16,360.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:362.2,379.26 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:379.26,380.72 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:380.72,381.46 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:381.46,383.7 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:384.6,384.16 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:394.26,395.72 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:395.72,396.70 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:396.70,398.7 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:399.6,399.16 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:409.26,411.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:415.2,415.82 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:415.82,420.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:422.2,425.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:428.80,430.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:430.16,432.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:434.2,444.44 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:444.44,445.33 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:445.33,447.14 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:449.3,449.48 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:449.48,450.35 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:450.35,453.15 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:458.2,458.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:458.30,460.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:462.2,462.67 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:465.78,470.2 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:472.76,474.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:474.16,476.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:478.2,479.22 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:479.22,481.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:483.2,483.42 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:486.87,488.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:488.16,490.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:492.2,493.22 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:493.22,495.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/services_panel.go:497.2,497.46 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:15.52,19.40 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:19.40,21.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:23.2,27.39 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:27.39,29.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:31.2,33.12 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:36.43,44.12 6 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:44.12,48.49 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:48.49,50.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:53.2,55.34 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:55.34,59.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/subprocess.go:61.2,65.22 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:10.62,12.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:34.79,38.35 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:38.35,40.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:43.2,43.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:47.84,53.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:55.55,56.35 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:56.35,62.3 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:68.67,71.36 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:71.36,72.25 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:72.25,74.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:75.3,79.7 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:79.7,80.11 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:81.25,83.11 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:84.22,86.11 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:87.22,89.34 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/tasks_adapter.go:94.2,100.30 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/theme.go:8.60,10.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/theme.go:13.40,19.2 5 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:15.61,18.65 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:18.65,20.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:20.8,22.32 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:22.32,23.36 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:23.36,25.10 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:27.4,27.33 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:27.33,30.5 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:33.2,34.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:34.16,35.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:37.2,38.37 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:41.65,44.46 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:44.46,46.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:46.8,48.32 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:48.32,49.36 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:49.36,51.10 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:53.4,53.33 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:53.33,56.5 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:59.2,60.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:60.16,61.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:63.2,64.37 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:67.33,70.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:74.88,75.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:75.44,77.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:78.2,89.29 9 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:89.29,91.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:91.8,91.34 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:91.34,93.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:95.2,95.29 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:95.29,98.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:100.2,100.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:100.22,102.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:104.2,105.22 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:105.22,107.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:110.69,112.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:114.44,117.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:119.46,122.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:124.63,128.2 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:131.70,132.34 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:132.34,134.17 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:134.17,136.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:137.3,137.43 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:137.43,139.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:140.3,140.43 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:140.43,142.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:143.3,143.34 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:145.2,145.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:148.44,150.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:153.46,155.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:158.52,159.38 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:159.38,161.17 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:161.17,163.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:164.3,164.34 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:168.73,170.43 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:170.43,172.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:173.2,174.41 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:177.70,179.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:181.43,183.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:185.54,187.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:189.42,192.24 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:192.24,194.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:195.2,195.27 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:198.61,200.32 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:200.32,202.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:203.2,203.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:206.55,212.54 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:212.54,214.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:215.2,216.12 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:219.44,221.28 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:222.14,223.33 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:224.22,225.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:227.2,227.34 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:230.52,232.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:234.42,236.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:238.33,243.2 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:245.111,246.65 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:246.65,248.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:249.2,249.76 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:252.137,253.72 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:253.72,255.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:257.2,262.25 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:262.25,264.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:266.2,266.35 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:266.35,268.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:270.2,272.39 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:272.39,273.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:273.44,275.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:278.2,278.31 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:281.40,282.37 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:282.37,286.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:288.2,290.12 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:293.40,294.37 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:294.37,298.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:300.2,302.12 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:305.93,306.25 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:306.25,307.21 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:307.21,308.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:308.22,310.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:311.4,311.18 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:314.2,314.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:317.93,318.25 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:318.25,319.21 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:319.21,320.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:320.13,322.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:323.4,323.24 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:326.2,326.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:329.43,331.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:333.66,336.48 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:336.48,337.45 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:337.45,339.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:342.2,342.19 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:346.66,349.48 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:349.48,350.45 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:350.45,352.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:355.2,355.19 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:358.57,367.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:369.57,371.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/view_helpers.go:373.54,375.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:19.29,20.27 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:20.27,23.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:25.2,25.24 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:65.61,92.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:94.40,96.56 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:96.56,98.58 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:98.58,100.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:101.3,101.50 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:104.2,118.94 10 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:118.94,120.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:120.8,122.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:124.2,164.12 31 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:167.47,168.92 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:168.92,170.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:172.2,174.12 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:177.48,179.18 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:179.18,181.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:183.2,184.24 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:184.24,186.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:188.2,189.38 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:192.43,194.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:197.52,198.102 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:198.102,200.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:202.2,202.75 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/views.go:202.75,204.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:18.75,21.59 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:21.59,29.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:30.65,32.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:43.59,44.61 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:44.61,46.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:47.4,47.61 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:47.61,49.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:50.4,50.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:56.76,57.53 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:57.53,57.91 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:60.65,71.33 10 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:71.33,73.42 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:73.42,75.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:76.8,78.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:80.2,80.36 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:80.36,83.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:85.2,85.15 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:88.39,89.50 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:89.50,91.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:93.2,93.42 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:96.45,98.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:98.16,100.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:102.2,104.12 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:107.76,109.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:109.16,111.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:113.2,132.87 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:132.87,135.26 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:135.26,136.70 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:136.70,137.56 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:137.56,139.7 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:140.6,140.16 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:146.2,149.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:152.44,153.121 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:153.121,154.67 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:154.67,156.18 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:156.18,158.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:159.4,159.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:164.79,166.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:166.16,168.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:170.2,176.67 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/volumes_panel.go:179.77,191.2 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/window.go:10.50,12.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/window.go:14.48,16.2 1 0 +mode: atomic +mode: atomic +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:33.58,34.71 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:34.71,36.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:39.66,41.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:43.61,45.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:47.50,50.20 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:50.20,52.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:54.2,54.53 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:57.50,60.20 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:60.20,62.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:64.2,64.65 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/context_state.go:67.57,69.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:16.55,18.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:20.50,26.30 5 2 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:26.30,28.3 1 4 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:31.63,36.37 4 2 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:36.37,37.22 1 6 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:37.22,39.4 1 3 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:43.57,47.17 3 2 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:47.17,49.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:51.2,51.47 1 2 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:51.47,53.3 1 5 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:56.47,61.2 3 3 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:63.58,67.45 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:67.45,70.3 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:72.2,72.49 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:76.40,81.2 3 2 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:83.51,87.37 3 3 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:87.37,88.35 1 4 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:88.35,90.4 1 2 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:92.2,92.11 1 1 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:95.45,100.37 4 2 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:100.37,102.3 1 4 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:103.2,103.15 1 2 +github.com/jesseduffield/lazydocker/pkg/gui/panels/filtered_list.go:106.48,111.2 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/list_panel.go:14.57,16.25 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/list_panel.go:16.25,18.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/list_panel.go:20.2,20.33 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/list_panel.go:23.50,26.33 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/list_panel.go:26.33,28.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/list_panel.go:32.55,34.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/list_panel.go:36.44,38.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/list_panel.go:40.44,42.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:80.51,85.95 4 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:85.95,87.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:89.2,89.25 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:89.25,91.17 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:91.17,93.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:96.2,96.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:99.53,101.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:103.52,105.16 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:105.16,106.41 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:106.41,108.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:110.3,110.32 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:110.32,111.53 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:111.53,111.83 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:114.3,114.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:117.2,119.33 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:122.59,123.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:123.30,125.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:127.2,128.34 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:128.34,130.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:132.2,138.33 5 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:141.60,145.9 3 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:145.9,148.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:150.2,150.18 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:153.54,157.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:159.54,163.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:165.57,166.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:166.30,168.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:170.2,172.28 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:175.57,176.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:176.30,178.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:180.2,182.28 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:185.41,187.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:189.51,192.2 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:194.47,197.48 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:197.48,198.47 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:198.47,200.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:202.3,202.67 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:202.67,203.78 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:203.78,205.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:206.6,208.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:210.3,210.25 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:210.25,211.78 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:211.78,213.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:216.3,216.14 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:219.2,221.29 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:224.52,227.31 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:227.31,229.74 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:229.74,231.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:232.3,233.17 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:233.17,235.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:236.3,238.29 2 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:238.29,239.44 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:239.44,241.5 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:244.3,244.40 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:244.40,246.4 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:247.3,247.13 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:250.2,250.12 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:253.58,254.30 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:254.30,256.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:258.2,258.42 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:261.55,263.2 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:265.47,266.22 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:266.22,268.3 1 0 +github.com/jesseduffield/lazydocker/pkg/gui/panels/side_list_panel.go:270.2,270.20 1 0 +mode: atomic +mode: atomic +mode: atomic +github.com/jesseduffield/lazydocker/pkg/commands/container.go:46.78,48.86 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:48.86,49.100 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:49.100,55.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:56.3,56.13 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:59.2,59.12 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:63.34,66.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:69.35,72.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:75.37,78.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:81.37,84.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:87.49,88.24 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:88.24,90.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:93.2,93.33 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:93.33,95.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:97.2,97.35 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:97.35,99.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:101.2,104.17 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:108.84,110.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:110.16,112.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:115.2,115.27 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:115.27,117.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:119.2,119.53 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:123.49,126.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:129.66,131.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:134.68,136.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:136.16,138.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:140.2,140.82 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container.go:144.42,146.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:138.68,143.23 4 1 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:143.23,145.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:146.2,146.14 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:150.66,152.23 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:152.23,154.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:155.2,155.14 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:158.82,164.2 4 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:167.64,168.22 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:168.22,170.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:172.2,172.37 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:172.37,173.48 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:173.48,176.4 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:180.59,184.23 4 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:184.23,186.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/container_stats.go:187.2,187.38 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:66.75,70.2 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:73.161,75.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:75.16,77.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:79.2,80.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:80.16,82.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:84.2,85.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:85.16,87.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:89.2,113.16 5 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:113.16,116.3 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:118.2,118.27 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:121.39,123.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:125.71,128.16 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:128.16,134.3 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:136.2,139.21 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:139.21,154.3 5 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:156.2,156.35 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:159.148,164.16 4 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:164.16,166.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:168.2,170.28 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:170.28,172.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:172.8,174.17 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:174.17,176.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:179.2,181.34 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:184.98,186.35 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:186.35,187.40 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:187.40,188.66 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:188.66,190.15 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:193.3,193.26 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:198.94,203.16 4 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:203.16,205.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:207.2,209.39 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:209.39,213.56 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:213.56,214.44 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:214.44,216.10 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:221.3,221.26 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:221.26,230.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:232.3,234.47 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:234.47,236.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:236.9,238.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:239.3,244.34 5 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:247.2,247.27 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:251.59,252.31 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:252.31,254.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:256.2,258.16 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:258.16,260.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:266.2,268.28 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:268.28,276.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:278.2,278.22 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:283.79,287.39 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:287.39,289.17 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:289.17,291.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:291.9,293.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:296.2,296.12 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:300.58,311.2 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:314.54,321.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:321.16,323.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:324.2,324.15 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:332.44,335.36 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:335.36,337.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:339.2,340.26 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:340.26,342.53 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:342.53,344.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:345.3,346.17 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:346.17,348.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:349.3,349.37 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:352.2,352.26 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:352.26,357.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:359.2,360.22 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:360.22,360.56 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:361.74,361.108 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:364.2,366.16 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:366.16,368.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:369.2,370.9 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:370.9,372.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:373.2,374.9 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:374.9,376.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:378.2,378.29 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:378.29,380.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/docker.go:388.2,388.31 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/dummies.go:14.37,16.2 1 19 +github.com/jesseduffield/lazydocker/pkg/commands/dummies.go:19.44,29.2 2 19 +github.com/jesseduffield/lazydocker/pkg/commands/dummies.go:32.34,36.2 3 19 +github.com/jesseduffield/lazydocker/pkg/commands/dummies.go:39.45,41.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/dummies.go:44.78,52.2 2 0 github.com/jesseduffield/lazydocker/pkg/commands/errors.go:18.33,19.16 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/errors.go:23.2,23.28 1 1 github.com/jesseduffield/lazydocker/pkg/commands/errors.go:19.16,21.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/errors.go:23.2,23.28 1 1 github.com/jesseduffield/lazydocker/pkg/commands/errors.go:35.61,39.2 3 0 github.com/jesseduffield/lazydocker/pkg/commands/errors.go:42.52,44.2 1 0 github.com/jesseduffield/lazydocker/pkg/commands/errors.go:46.39,48.2 1 0 github.com/jesseduffield/lazydocker/pkg/commands/errors.go:51.45,53.35 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/errors.go:56.2,56.14 1 0 github.com/jesseduffield/lazydocker/pkg/commands/errors.go:53.35,55.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:43.75,51.2 1 16 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:55.71,57.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:60.74,66.2 5 5 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:69.76,71.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:74.56,77.2 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:80.71,84.2 2 5 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:87.54,90.2 2 3 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:93.50,95.16 2 4 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:98.2,98.22 1 3 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:101.2,101.15 1 2 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:95.16,97.3 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:98.22,100.3 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:105.70,112.2 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:114.71,116.16 2 5 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:124.2,124.26 1 2 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:116.16,119.25 1 3 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:122.3,122.48 1 2 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:119.25,121.4 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:128.53,137.2 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:140.49,149.2 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:153.66,155.18 2 4 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:158.2,158.18 1 4 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:163.2,163.18 1 4 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:167.2,167.51 1 3 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:155.18,157.3 1 3 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:158.18,159.50 1 2 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:159.50,161.4 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:163.18,165.3 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:171.88,173.2 1 3 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:176.50,179.56 3 3 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:182.2,182.46 1 3 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:179.56,181.3 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:187.52,189.2 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:192.67,194.16 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:197.2,200.16 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:203.2,203.12 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:194.16,196.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:200.16,202.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:207.78,209.16 2 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:214.2,214.56 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:218.2,218.40 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:223.2,223.28 1 1 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:209.16,212.3 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:214.56,217.3 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:218.40,221.3 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:227.51,230.2 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:233.59,234.41 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:240.2,240.18 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:234.41,235.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:238.3,238.20 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:235.25,237.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:246.61,250.16 4 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:256.2,256.12 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:250.16,251.26 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:254.3,254.31 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:251.26,253.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:260.48,262.16 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:265.2,265.29 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:262.16,264.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:269.64,271.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:274.66,278.37 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:282.2,282.35 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:294.2,299.27 4 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:325.2,327.26 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:330.2,330.12 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:278.37,280.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:282.35,284.17 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:288.3,288.27 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:284.17,286.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:299.27,301.13 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:301.13,303.18 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:307.4,307.45 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:311.4,311.52 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:317.4,317.44 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:321.4,321.13 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:303.18,305.5 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:307.45,309.5 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:311.52,312.19 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:312.19,314.6 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:317.44,319.5 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:327.26,329.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:334.47,335.24 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:339.2,339.63 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:344.2,344.27 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:335.24,338.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:339.63,342.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/os.go:348.55,352.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:28.60,31.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:34.64,35.85 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:39.2,39.12 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:35.85,37.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:48.60,50.21 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:54.2,55.18 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:58.2,59.23 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:63.2,65.60 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:71.2,75.18 4 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:79.2,84.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:50.21,52.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:55.18,57.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:59.23,61.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:65.60,69.3 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:75.18,77.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:88.49,91.16 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:95.2,96.32 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:100.2,100.93 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:91.16,93.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:96.32,98.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:104.59,106.16 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:110.2,112.31 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:139.2,139.23 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:106.16,108.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:112.31,117.20 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:121.3,123.25 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:127.3,136.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:117.20,119.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:123.25,125.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/image.go:143.45,146.2 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/os_default_platform.go:9.30,19.2 1 16 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:247.64,249.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:252.47,254.35 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:258.2,258.49 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:254.35,256.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:262.48,265.25 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:269.2,270.16 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:275.2,276.21 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:284.2,284.48 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:265.25,267.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:270.16,273.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:276.21,278.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:278.8,278.28 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:278.28,280.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:280.8,282.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:288.42,290.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:293.48,294.27 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:295.16,296.36 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:299.3,299.21 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:300.17,301.22 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:302.17,303.23 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:304.16,305.24 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:306.14,307.21 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:308.20,309.22 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:310.18,311.25 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:312.10,313.23 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:296.36,298.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:318.72,319.86 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:330.2,330.12 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:319.86,320.100 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:327.3,327.13 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:320.100,326.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:334.34,336.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:339.37,341.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:344.49,346.33 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:350.2,350.35 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:354.2,355.17 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:346.33,348.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:350.35,352.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:359.63,361.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:364.39,365.48 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:369.2,369.37 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:365.48,367.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:369.37,370.74 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:370.74,373.4 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:378.51,389.2 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:392.49,395.2 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:398.60,400.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:403.49,405.16 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:409.2,409.82 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:405.16,407.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/container.go:413.42,415.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:56.75,60.2 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:63.161,65.16 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:69.2,92.16 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:97.2,97.27 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:65.16,67.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:92.16,95.3 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:101.49,104.2 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:107.52,112.16 4 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:117.2,121.21 4 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:138.2,140.8 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:112.16,115.3 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:121.21,125.69 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:129.3,130.42 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:135.3,135.28 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:125.69,128.4 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:130.42,131.32 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:131.32,133.5 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:144.55,147.35 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:147.35,148.42 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:148.42,149.34 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:149.34,151.5 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:156.71,159.16 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:164.2,167.21 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:187.2,188.8 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:159.16,162.3 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:167.21,185.3 8 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:192.62,199.16 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:203.2,205.28 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:214.2,217.47 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:224.2,224.43 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:236.2,240.12 4 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:199.16,201.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:205.28,207.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:207.8,209.17 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:209.17,211.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:217.47,219.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:219.8,221.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:224.43,225.67 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:229.3,229.67 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:233.3,233.45 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:225.67,227.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:229.67,231.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:243.98,245.35 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:245.35,246.40 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:252.3,252.26 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:246.40,247.66 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:247.66,249.15 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:257.111,260.39 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:269.2,269.29 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:260.39,261.36 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:266.3,266.65 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:261.36,262.97 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:262.97,263.15 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:273.63,280.16 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:284.2,286.39 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:325.2,325.27 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:280.16,282.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:286.39,290.56 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:298.3,298.26 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:310.3,312.47 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:317.3,322.34 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:290.56,291.44 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:291.44,293.10 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:298.26,308.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:312.47,314.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:314.9,316.4 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:329.59,330.31 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:334.2,336.16 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:344.2,346.28 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:357.2,357.22 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:330.31,332.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:336.16,338.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:346.28,355.3 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:362.56,369.39 5 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:373.2,375.16 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:379.2,380.57 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:384.2,384.39 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:388.2,388.12 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:369.39,371.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:375.16,377.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:380.57,382.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:384.39,386.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:392.58,403.2 3 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:406.54,414.16 2 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:417.2,417.15 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/docker.go:414.16,416.3 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/dummies.go:14.37,16.2 1 16 -github.com/jesseduffield/lazydocker/pkg/commands/dummies.go:19.44,29.2 2 16 -github.com/jesseduffield/lazydocker/pkg/commands/dummies.go:32.34,36.2 3 16 -github.com/jesseduffield/lazydocker/pkg/commands/dummies.go:39.45,41.2 1 0 -github.com/jesseduffield/lazydocker/pkg/commands/dummies.go:44.78,51.2 1 0 -mode: atomic -mode: atomic -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:23.50,25.54 2 3 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:28.2,29.31 2 1 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:32.2,32.14 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:25.54,27.3 1 2 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:29.31,31.3 1 1 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:36.50,38.33 2 11 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:41.2,41.61 1 10 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:38.33,40.3 1 1 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:46.71,48.37 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:51.2,52.41 2 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:48.37,50.3 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:57.66,59.2 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:62.44,66.2 3 4 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:69.22,75.2 5 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:78.79,79.36 1 7 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:82.2,82.12 1 7 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:79.36,81.3 1 5 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:86.24,87.11 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:90.2,90.10 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:87.11,89.3 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:102.58,103.35 1 1 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:103.35,105.3 1 1 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:108.60,109.35 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:109.35,111.3 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:117.88,119.33 2 4 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:123.2,124.31 2 4 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:128.2,130.31 2 3 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:138.2,138.53 1 2 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:119.33,121.3 1 1 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:124.31,126.3 1 1 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:130.31,132.10 2 4 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:135.3,135.26 1 3 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:132.10,134.4 1 1 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:145.90,146.21 1 6 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:150.2,151.28 2 6 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:155.2,155.34 1 6 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:146.21,148.3 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:151.28,153.3 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:159.59,160.41 1 6 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:164.2,167.54 3 5 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:160.41,162.3 1 1 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:171.36,174.2 2 22 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:176.50,177.31 1 8 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:180.2,181.27 2 5 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:189.2,189.18 1 5 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:177.31,179.3 1 3 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:181.27,182.40 1 6 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:182.40,184.43 2 11 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:184.43,186.5 1 6 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:192.81,194.43 2 6 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:203.2,203.29 1 6 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:194.43,195.28 1 11 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:198.3,198.38 1 9 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:201.3,201.57 1 9 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:195.28,196.12 1 2 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:198.38,200.4 1 9 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:208.57,209.39 1 8 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:214.2,214.13 1 6 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:209.39,210.43 1 15 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:210.43,212.4 1 2 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:217.84,219.36 2 8 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:222.2,222.21 1 8 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:219.36,221.3 1 15 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:225.38,228.29 3 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:239.2,239.16 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:228.29,229.26 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:229.26,231.4 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:231.9,233.22 2 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:236.4,236.14 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:233.22,235.5 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:242.39,245.29 3 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:256.2,256.16 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:245.29,246.26 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:246.26,248.4 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:248.9,250.22 2 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:253.4,253.14 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:250.22,252.5 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:259.59,263.2 3 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:266.52,282.13 3 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:285.2,285.25 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:282.13,284.3 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:289.52,304.13 3 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:307.2,307.22 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:304.13,306.3 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:311.38,313.29 2 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:319.2,319.33 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:313.29,315.22 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:315.22,317.4 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:323.65,325.2 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:328.57,329.17 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:333.2,336.21 3 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:339.2,340.27 2 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:344.2,344.15 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:329.17,331.3 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:336.21,338.3 1 0 -github.com/jesseduffield/lazydocker/pkg/utils/utils.go:340.27,342.3 1 0 -mode: atomic -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:291.36,353.2 1 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:368.138,370.16 2 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:374.2,375.16 2 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:380.2,380.27 1 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:384.2,395.23 2 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:370.16,372.3 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:375.16,377.3 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:380.27,382.3 1 2 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:398.64,402.58 3 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:406.2,406.29 1 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:402.58,404.3 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:409.72,413.2 2 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:415.78,418.45 2 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:430.2,431.16 2 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:435.2,435.54 1 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:439.2,439.18 1 3 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:418.45,419.25 1 1 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:419.25,421.18 2 1 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:424.4,424.16 1 1 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:421.18,423.5 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:425.9,427.4 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:431.16,433.3 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:435.54,437.3 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:446.83,448.16 2 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:452.2,452.49 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:456.2,457.16 2 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:461.2,461.49 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:448.16,450.3 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:452.49,454.3 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:457.16,459.3 1 0 -github.com/jesseduffield/lazydocker/pkg/config/app_config.go:465.45,467.2 1 0 -github.com/jesseduffield/lazydocker/pkg/config/config_linux.go:4.42,9.2 1 3 -mode: atomic -mode: atomic -mode: atomic +github.com/jesseduffield/lazydocker/pkg/commands/errors.go:56.2,56.14 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:31.70,32.85 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:32.85,34.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:36.2,36.12 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:39.85,41.25 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:41.25,43.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:45.2,46.18 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:46.18,48.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:49.2,50.23 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:50.23,52.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:54.2,56.64 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:56.64,60.3 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:62.2,66.18 4 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:66.18,68.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:70.2,75.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:79.49,81.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:81.16,83.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:85.2,85.85 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:85.85,87.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:89.2,92.33 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:96.59,98.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:98.16,100.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:102.2,104.31 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:104.31,107.20 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:107.20,109.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:111.3,114.25 4 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:114.25,118.88 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:118.88,119.40 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:119.40,121.11 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:126.3,135.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:138.2,138.23 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/image.go:142.45,145.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/network.go:23.63,25.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/network.go:25.16,27.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/network.go:29.2,31.35 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/network.go:31.35,40.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/network.go:42.2,42.25 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/network.go:46.47,49.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/network.go:52.34,54.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:42.75,50.2 1 19 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:54.71,56.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:59.74,65.2 5 5 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:68.102,74.2 5 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:77.76,79.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:82.56,85.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:88.71,91.2 2 5 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:94.99,97.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:99.73,102.32 2 2 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:102.32,111.3 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:111.8,113.3 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:115.2,115.86 1 2 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:119.54,122.2 2 3 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:125.50,127.16 2 4 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:127.16,129.3 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:130.2,130.22 1 3 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:130.22,132.3 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:133.2,133.15 1 2 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:136.71,138.16 2 5 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:138.16,142.9 2 3 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:142.9,144.4 1 2 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:145.3,145.28 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:147.2,147.26 1 2 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:151.53,160.2 5 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:163.49,172.2 5 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:176.66,178.18 2 4 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:178.18,180.3 1 3 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:181.2,181.18 1 4 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:181.18,182.50 1 2 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:182.50,184.4 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:186.2,186.18 1 4 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:186.18,188.3 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:190.2,190.51 1 3 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:194.88,196.2 1 3 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:199.50,201.32 2 5 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:201.32,207.3 2 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:207.8,215.3 2 4 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:216.2,216.32 1 5 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:221.52,223.2 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:226.67,228.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:228.16,230.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:231.2,234.16 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:234.16,236.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:237.2,237.12 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:241.78,243.16 2 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:243.16,246.3 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:248.2,248.56 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:248.56,251.3 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:252.2,252.40 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:252.40,255.3 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:257.2,257.28 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:261.51,264.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:267.59,268.41 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:268.41,269.25 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:269.25,271.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:272.3,272.20 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:274.2,274.18 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:280.61,284.16 4 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:284.16,285.26 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:285.26,287.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:288.3,288.31 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:290.2,290.12 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:294.48,296.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:296.16,298.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:299.2,299.29 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:303.64,305.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:308.66,311.37 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:311.37,313.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:315.2,315.35 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:315.35,317.17 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:317.17,319.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:321.3,321.27 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:327.2,332.27 4 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:332.27,334.13 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:334.13,336.18 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:336.18,338.5 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:340.4,340.45 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:340.45,342.5 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:344.4,344.52 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:344.52,345.19 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:345.19,347.6 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:350.4,350.44 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:350.44,352.5 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:354.4,354.13 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:358.2,360.26 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:360.26,362.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:363.2,363.12 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:367.47,369.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os.go:372.55,374.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/os_default_platform.go:10.30,18.2 1 19 +github.com/jesseduffield/lazydocker/pkg/commands/service.go:23.76,25.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/service.go:28.32,30.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/service.go:33.30,35.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/service.go:38.35,40.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/service.go:43.33,45.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/service.go:47.59,53.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/service.go:56.47,58.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/service.go:61.49,72.2 5 0 +github.com/jesseduffield/lazydocker/pkg/commands/service.go:75.66,83.2 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/volume.go:23.61,25.16 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/volume.go:25.16,27.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/volume.go:29.2,33.33 3 0 +github.com/jesseduffield/lazydocker/pkg/commands/volume.go:33.33,42.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/volume.go:44.2,44.24 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/volume.go:48.46,51.2 2 0 +github.com/jesseduffield/lazydocker/pkg/commands/volume.go:54.43,56.2 1 0 mode: atomic +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:32.53,36.83 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:36.83,38.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:39.39,39.61 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:48.66,52.16 4 3 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:52.16,55.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:58.2,58.23 1 3 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:58.23,60.17 2 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:60.17,62.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:63.3,64.17 2 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:64.17,66.4 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:68.3,68.21 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:70.2,70.26 1 2 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:75.33,75.47 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:85.44,87.2 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:89.117,91.16 2 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:91.16,93.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:94.2,97.16 3 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:97.16,99.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:103.2,108.16 5 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:108.16,110.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:113.2,118.8 2 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:123.87,127.6 3 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:127.6,128.10 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:129.21,130.20 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:131.14,131.14 0 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:134.3,135.17 2 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:135.17,136.12 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:138.3,138.13 1 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:143.79,145.16 2 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:145.16,147.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:148.2,149.12 2 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:152.101,156.16 4 1 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:156.16,158.3 1 0 +github.com/jesseduffield/lazydocker/pkg/commands/ssh/ssh.go:159.2,159.17 1 1 mode: atomic mode: atomic diff --git a/go.mod b/go.mod index a2a12e1..530df30 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/OpenPeeDeeP/xdg v0.2.1-0.20190312153938-4ba9e1eb294c github.com/boz/go-throttle v0.0.0-20160922054636-fdc4eab740c1 github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 + github.com/docker/cli v20.10.15+incompatible github.com/docker/docker v20.10.15+incompatible github.com/fatih/color v1.10.0 github.com/go-errors/errors v1.4.2 @@ -33,8 +34,10 @@ require ( github.com/Microsoft/go-winio v0.4.14 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/docker-credential-helpers v0.8.0 // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.4.0 // indirect + github.com/fvbommel/sortorder v1.1.0 // indirect github.com/gdamore/encoding v1.0.0 // indirect github.com/gdamore/tcell/v2 v2.5.3 // indirect github.com/goccy/go-yaml v1.11.0 @@ -55,7 +58,7 @@ require ( github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect golang.org/x/exp v0.0.0-20220428152302-39d4317da171 // indirect golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect - golang.org/x/sys v0.6.0 // indirect + golang.org/x/sys v0.8.0 // indirect golang.org/x/term v0.1.0 // indirect golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect diff --git a/go.sum b/go.sum index cf1eb06..c9d326f 100644 --- a/go.sum +++ b/go.sum @@ -14,17 +14,21 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/cli v20.10.15+incompatible h1:HGO75iIgpyuG1m0hw0Kp7hY5o7XELmY1rsT9gIptOSU= +github.com/docker/cli v20.10.15+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v20.10.15+incompatible h1:dk9FewY/9Xwm4ay/HViEEHSQuM/kL4F+JaG6GQdgmGo= github.com/docker/docker v20.10.15+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8= +github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fvbommel/sortorder v1.1.0 h1:fUmoe+HLsBTctBDoaBwpQo5N+nrCp8g/BjKb/6ZQmYw= +github.com/fvbommel/sortorder v1.1.0/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.4.0/go.mod h1:cTTuF84Dlj/RqmaCIV5p4w8uG1zWdk0SF6oBpwHp4fU= @@ -33,6 +37,9 @@ github.com/gdamore/tcell/v2 v2.5.3/go.mod h1:wSkrPaXoiIWZqW/g7Px4xc79di6FTcpB8tv github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/goccy/go-yaml v1.11.0 h1:n7Z+zx8S9f9KgzG6KtQKf+kwqXZlLNR2F6018Dgau54= github.com/goccy/go-yaml v1.11.0/go.mod h1:H+mJrWtjPTJAHvRbV09MCK9xYwODM+wRTVFFTWckfng= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -40,8 +47,8 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/gookit/color v1.5.0 h1:1Opow3+BWDwqor78DcJkJCIwnkviFi+rrOANki9BUFw= github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= @@ -66,16 +73,12 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.11 h1:FxPOTFNqGkuDUGi3H/qkUbQO4ZiBa2brKq5r0l8TGeM= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= @@ -138,6 +141,7 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/exp v0.0.0-20220428152302-39d4317da171 h1:TfdoLivD44QwvssI9Sv1xwa5DcL5XQr4au4sZ2F2NV4= golang.org/x/exp v0.0.0-20220428152302-39d4317da171/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -156,11 +160,9 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -169,10 +171,8 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220318055525-2edf467146b5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/pkg/commands/docker.go b/pkg/commands/docker.go index d7268a7..d31a175 100644 --- a/pkg/commands/docker.go +++ b/pkg/commands/docker.go @@ -7,10 +7,14 @@ import ( "fmt" "io" ogLog "log" + "os" "os/exec" "strings" "time" + cliconfig "github.com/docker/cli/cli/config" + ddocker "github.com/docker/cli/cli/context/docker" + ctxstore "github.com/docker/cli/cli/context/store" dockerTypes "github.com/docker/docker/api/types" "github.com/docker/docker/client" "github.com/imdario/mergo" @@ -72,7 +76,12 @@ func NewDockerCommand(log *logrus.Entry, osCommand *OSCommand, tr *i18n.Translat ogLog.Fatal(err) } - cli, err := client.NewClientWithOpts(client.FromEnv, client.WithVersion(APIVersion)) + dockerHost, err := determineDockerHost() + if err != nil { + ogLog.Printf("> could not determine host %v", err) + } + + cli, err := client.NewClientWithOpts(client.FromEnv, client.WithVersion(APIVersion), client.WithHost(dockerHost)) if err != nil { ogLog.Fatal(err) } @@ -314,3 +323,67 @@ func (c *DockerCommand) DockerComposeConfig() string { } return output } + +// determineDockerHost tries to the determine the docker host that we should connect to +// in the following order of decreasing precedence: +// - value of "DOCKER_HOST" environment variable +// - host retrieved from the current context (specified via DOCKER_CONTEXT) +// - "default docker host" for the host operating system, otherwise +func determineDockerHost() (string, error) { + // If the docker host is explicitly set via the "DOCKER_HOST" environment variable, + // then its a no-brainer :shrug: + if os.Getenv("DOCKER_HOST") != "" { + return os.Getenv("DOCKER_HOST"), nil + } + + currentContext := os.Getenv("DOCKER_CONTEXT") + if currentContext == "" { + dockerConfigDir := cliconfig.Dir() + if _, err := os.Stat(dockerConfigDir); err != nil { + return "", err + } + cf, err := cliconfig.Load(dockerConfigDir) + if err != nil { + return "", err + } + currentContext = cf.CurrentContext + } + + if currentContext == "" { + // If a docker context is neither specified via the "DOCKER_CONTEXT" environment variable nor via the + // $HOME/.docker/config file, then we fall back to connecting to the "default docker host" meant for + // the host operating system. + return defaultDockerHost, nil + } + + storeConfig := ctxstore.NewConfig( + func() interface{} { return &ddocker.EndpointMeta{} }, + ctxstore.EndpointTypeGetter(ddocker.DockerEndpoint, func() interface{} { return &ddocker.EndpointMeta{} }), + ) + + st := ctxstore.New(cliconfig.ContextStoreDir(), storeConfig) + md, err := st.GetMetadata(currentContext) + if err != nil { + return "", err + } + dockerEP, ok := md.Endpoints[ddocker.DockerEndpoint] + if !ok { + return "", err + } + dockerEPMeta, ok := dockerEP.(ddocker.EndpointMeta) + if !ok { + return "", fmt.Errorf("expected docker.EndpointMeta, got %T", dockerEP) + } + + if dockerEPMeta.Host != "" { + return dockerEPMeta.Host, nil + } + + // We might end up here, if the context was created with the `host` set to an empty value (i.e. ''). + // For example: + // ```sh + // docker context create foo --docker "host=" + // ``` + // In such scenario, we mimic the `docker` cli and try to connect to the "default docker host". + return defaultDockerHost, nil +} diff --git a/pkg/commands/docker_host_unix.go b/pkg/commands/docker_host_unix.go new file mode 100644 index 0000000..ee5fb7a --- /dev/null +++ b/pkg/commands/docker_host_unix.go @@ -0,0 +1,7 @@ +//go:build !windows + +package commands + +const ( + defaultDockerHost = "unix:///var/run/docker.sock" +) diff --git a/pkg/commands/docker_host_windows.go b/pkg/commands/docker_host_windows.go new file mode 100644 index 0000000..471b55a --- /dev/null +++ b/pkg/commands/docker_host_windows.go @@ -0,0 +1,5 @@ +package commands + +const ( + defaultDockerHost = "npipe:////./pipe/docker_engine" +) diff --git a/vendor/github.com/docker/cli/AUTHORS b/vendor/github.com/docker/cli/AUTHORS new file mode 100644 index 0000000..8990f85 --- /dev/null +++ b/vendor/github.com/docker/cli/AUTHORS @@ -0,0 +1,771 @@ +# This file lists all individuals having contributed content to the repository. +# For how it is generated, see `scripts/docs/generate-authors.sh`. + +Aanand Prasad +Aaron L. Xu +Aaron Lehmann +Aaron.L.Xu +Abdur Rehman +Abhinandan Prativadi +Abin Shahab +Abreto FU +Ace Tang +Addam Hardy +Adolfo Ochagavía +Adrian Plata +Adrien Duermael +Adrien Folie +Ahmet Alp Balkan +Aidan Feldman +Aidan Hobson Sayers +AJ Bowen +Akhil Mohan +Akihiro Suda +Akim Demaille +Alan Thompson +Albert Callarisa +Albin Kerouanton +Aleksa Sarai +Aleksander Piotrowski +Alessandro Boch +Alex Mavrogiannis +Alex Mayer +Alexander Boyd +Alexander Larsson +Alexander Morozov +Alexander Ryabov +Alexandre González +Alfred Landrum +Alicia Lauerman +Allen Sun +Alvin Deng +Amen Belayneh +Amir Goldstein +Amit Krishnan +Amit Shukla +Amy Lindburg +Anca Iordache +Anda Xu +Andrea Luzzardi +Andreas Köhler +Andrew France +Andrew Hsu +Andrew Macpherson +Andrew McDonnell +Andrew Po +Andrey Petrov +Andrii Berehuliak +André Martins +Andy Goldstein +Andy Rothfusz +Anil Madhavapeddy +Ankush Agarwal +Anne Henmi +Anton Polonskiy +Antonio Murdaca +Antonis Kalipetis +Anusha Ragunathan +Ao Li +Arash Deshmeh +Arko Dasgupta +Arnaud Porterie +Arthur Peka +Ashwini Oruganti +Azat Khuyiyakhmetov +Bardia Keyoumarsi +Barnaby Gray +Bastiaan Bakker +BastianHofmann +Ben Bonnefoy +Ben Creasy +Ben Firshman +Benjamin Boudreau +Benoit Sigoure +Bhumika Bayani +Bill Wang +Bin Liu +Bingshen Wang +Boaz Shuster +Bogdan Anton +Boris Pruessmann +Bradley Cicenas +Brandon Mitchell +Brandon Philips +Brent Salisbury +Bret Fisher +Brian (bex) Exelbierd +Brian Goff +Brian Wieder +Bryan Bess +Bryan Boreham +Bryan Murphy +bryfry +Cameron Spear +Cao Weiwei +Carlo Mion +Carlos Alexandro Becker +Carlos de Paula +Ce Gao +Cedric Davies +Cezar Sa Espinola +Chad Faragher +Chao Wang +Charles Chan +Charles Law +Charles Smith +Charlie Drage +ChaYoung You +Chen Chuanliang +Chen Hanxiao +Chen Mingjie +Chen Qiu +Chris Gavin +Chris Gibson +Chris McKinnel +Chris Snow +Chris Weyl +Christian Persson +Christian Stefanescu +Christophe Robin +Christophe Vidal +Christopher Biscardi +Christopher Crone +Christopher Jones +Christy Norman +Chun Chen +Clinton Kitson +Coenraad Loubser +Colin Hebert +Collin Guarino +Colm Hally +Comical Derskeal <27731088+derskeal@users.noreply.github.com> +Corey Farrell +Corey Quon +Craig Wilhite +Cristian Staretu +Daehyeok Mun +Dafydd Crosby +Daisuke Ito +dalanlan +Damien Nadé +Dan Cotora +Daniel Artine +Daniel Cassidy +Daniel Dao +Daniel Farrell +Daniel Gasienica +Daniel Goosen +Daniel Helfand +Daniel Hiltgen +Daniel J Walsh +Daniel Nephin +Daniel Norberg +Daniel Watkins +Daniel Zhang +Daniil Nikolenko +Danny Berger +Darren Shepherd +Darren Stahl +Dattatraya Kumbhar +Dave Goodchild +Dave Henderson +Dave Tucker +David Beitey +David Calavera +David Cramer +David Dooling +David Gageot +David Lechner +David Scott +David Sheets +David Williamson +David Xia +David Young +Deng Guangxing +Denis Defreyne +Denis Gladkikh +Denis Ollier +Dennis Docter +Derek McGowan +Deshi Xiao +Dharmit Shah +Dhawal Yogesh Bhanushali +Dieter Reuter +Dima Stopel +Dimitry Andric +Ding Fei +Diogo Monica +Djordje Lukic +Dmitry Gusev +Dmitry Smirnov +Dmitry V. Krivenok +Dominik Braun +Don Kjer +Dong Chen +Doug Davis +Drew Erny +Ed Costello +Elango Sivanandam +Eli Uriegas +Eli Uriegas +Elias Faxö +Elliot Luo <956941328@qq.com> +Eric Curtin +Eric G. Noriega +Eric Rosenberg +Eric Sage +Eric-Olivier Lamey +Erica Windisch +Erik Hollensbe +Erik St. Martin +Essam A. Hassan +Ethan Haynes +Euan Kemp +Eugene Yakubovich +Evan Allrich +Evan Hazlett +Evan Krall +Evelyn Xu +Everett Toews +Fabio Falci +Fabrizio Soppelsa +Felix Hupfeld +Felix Rabe +Filip Jareš +Flavio Crisciani +Florian Klein +Forest Johnson +Foysal Iqbal +François Scala +Fred Lifton +Frederic Hemberger +Frederick F. Kautz IV +Frederik Nordahl Jul Sabroe +Frieder Bluemle +Gabriel Nicolas Avellaneda +Gaetan de Villele +Gang Qiao +Gary Schaetz +Genki Takiuchi +George MacRorie +George Xie +Gianluca Borello +Gildas Cuisinier +Goksu Toprak +Gou Rao +Grant Reaber +Greg Pflaum +Guilhem Lettron +Guillaume J. Charmes +Guillaume Le Floch +gwx296173 +Günther Jungbluth +Hakan Özler +Hao Zhang <21521210@zju.edu.cn> +Harald Albers +Harold Cooper +Harry Zhang +He Simei +Hector S +Helen Xie +Henning Sprang +Henry N +Hernan Garcia +Hongbin Lu +Hu Keping +Huayi Zhang +Hugo Gabriel Eyherabide +huqun +Huu Nguyen +Hyzhou Zhy +Ian Campbell +Ian Philpot +Ignacio Capurro +Ilya Dmitrichenko +Ilya Khlopotov +Ilya Sotkov +Ioan Eugen Stan +Isabel Jimenez +Ivan Grcic +Ivan Markin +Jacob Atzen +Jacob Tomlinson +Jaivish Kothari +Jake Lambert +Jake Sanders +James Nesbitt +James Turnbull +Jamie Hannaford +Jan Koprowski +Jan Pazdziora +Jan-Jaap Driessen +Jana Radhakrishnan +Jared Hocutt +Jasmine Hegman +Jason Heiss +Jason Plum +Jay Kamat +Jean Rouge +Jean-Christophe Sirot +Jean-Pierre Huynh +Jeff Lindsay +Jeff Nickoloff +Jeff Silberman +Jeremy Chambers +Jeremy Unruh +Jeremy Yallop +Jeroen Franse +Jesse Adametz +Jessica Frazelle +Jezeniel Zapanta +Jian Zhang +Jie Luo +Jilles Oldenbeuving +Jim Galasyn +Jimmy Leger +Jimmy Song +jimmyxian +Jintao Zhang +Joao Fernandes +Joe Abbey +Joe Doliner +Joe Gordon +Joel Handwell +Joey Geiger +Joffrey F +Johan Euphrosine +Johannes 'fish' Ziemke +John Feminella +John Harris +John Howard +John Laswell +John Maguire +John Mulhausen +John Starks +John Stephens +John Tims +John V. Martinez +John Willis +Jon Johnson +Jonatas Baldin +Jonathan Boulle +Jonathan Lee +Jonathan Lomas +Jonathan McCrohan +Jonh Wendell +Jordan Jennings +Jose J. Escobar <53836904+jescobar-docker@users.noreply.github.com> +Joseph Kern +Josh Bodah +Josh Chorlton +Josh Hawn +Josh Horwitz +Josh Soref +Julien Barbier +Julien Kassar +Julien Maitrehenry +Justas Brazauskas +Justin Cormack +Justin Simonelis +Justyn Temme +Jyrki Puttonen +Jérémie Drouet +Jérôme Petazzoni +Jörg Thalheim +Kai Blin +Kai Qiang Wu (Kennan) +Kara Alexandra +Kareem Khazem +Karthik Nayak +Kat Samperi +Kathryn Spiers +Katie McLaughlin +Ke Xu +Kei Ohmura +Keith Hudgins +Ken Cochrane +Ken ICHIKAWA +Kenfe-Mickaël Laventure +Kevin Burke +Kevin Feyrer +Kevin Kern +Kevin Kirsche +Kevin Meredith +Kevin Richardson +Kevin Woblick +khaled souf +Kim Eik +Kir Kolyshkin +Kotaro Yoshimatsu +Krasi Georgiev +Kris-Mikael Krister +Kun Zhang +Kunal Kushwaha +Lachlan Cooper +Lai Jiangshan +Lars Kellogg-Stedman +Laura Frank +Laurent Erignoux +Lee Gaines +Lei Jitang +Lennie +Leo Gallucci +Lewis Daly +Li Yi +Li Yi +Liang-Chi Hsieh +Lifubang +Lihua Tang +Lily Guo +Lin Lu +Linus Heckemann +Liping Xue +Liron Levin +liwenqi +lixiaobing10051267 +Lloyd Dewolf +Lorenzo Fontana +Louis Opter +Luca Favatella +Luca Marturana +Lucas Chan +Luka Hartwig +Lukas Heeren +Lukasz Zajaczkowski +Lydell Manganti +Lénaïc Huard +Ma Shimiao +Mabin +Maciej Kalisz +Madhav Puri +Madhu Venugopal +Madhur Batra +Malte Janduda +Manjunath A Kumatagi +Mansi Nahar +mapk0y +Marc Bihlmaier +Marco Mariani +Marco Vedovati +Marcus Martins +Marianna Tessel +Marius Ileana +Marius Sturm +Mark Oates +Marsh Macy +Martin Mosegaard Amdisen +Mary Anthony +Mason Fish +Mason Malone +Mateusz Major +Mathieu Champlon +Matt Gucci +Matt Robenolt +Matteo Orefice +Matthew Heon +Matthieu Hauglustaine +Mauro Porras P +Max Shytikov +Maxime Petazzoni +Mei ChunTao +Micah Zoltu +Michael A. Smith +Michael Bridgen +Michael Crosby +Michael Friis +Michael Irwin +Michael Käufl +Michael Prokop +Michael Scharf +Michael Spetsiotis +Michael Steinert +Michael West +Michal Minář +Michał Czeraszkiewicz +Miguel Angel Alvarez Cabrerizo +Mihai Borobocea +Mihuleacc Sergiu +Mike Brown +Mike Casas +Mike Danese +Mike Dillon +Mike Goelzer +Mike MacCana +mikelinjie <294893458@qq.com> +Mikhail Vasin +Milind Chawre +Mindaugas Rukas +Miroslav Gula +Misty Stanley-Jones +Mohammad Banikazemi +Mohammed Aaqib Ansari +Mohini Anne Dsouza +Moorthy RS +Morgan Bauer +Morten Hekkvang +Moysés Borges +Mrunal Patel +muicoder +Muthukumar R +Máximo Cuadros +Mårten Cassel +Nace Oroz +Nahum Shalman +Nalin Dahyabhai +Nao YONASHIRO +Nassim 'Nass' Eddequiouaq +Natalie Parker +Nate Brennand +Nathan Hsieh +Nathan LeClaire +Nathan McCauley +Neil Peterson +Nick Adcock +Nico Stapelbroek +Nicola Kabar +Nicolas Borboën +Nicolas De Loof +Nikhil Chawla +Nikolas Garofil +Nikolay Milovanov +Nir Soffer +Nishant Totla +NIWA Hideyuki +Noah Treuhaft +O.S. Tezer +Odin Ugedal +ohmystack +Olle Jonsson +Olli Janatuinen +Oscar Wieman +Otto Kekäläinen +Ovidio Mallo +Pascal Borreli +Patrick Böänziger +Patrick Hemmer +Patrick Lang +Paul +Paul Kehrer +Paul Lietar +Paul Mulders +Paul Weaver +Pavel Pospisil +Paweł Szczekutowicz +Peeyush Gupta +Per Lundberg +Peter Edge +Peter Hsu +Peter Jaffe +Peter Kehl +Peter Nagy +Peter Salvatore +Peter Waller +Phil Estes +Philip Alexander Etling +Philipp Gillé +Philipp Schmied +pidster +pixelistik +Pratik Karki +Prayag Verma +Preston Cowley +Pure White +Qiang Huang +Qinglan Peng +qudongfang +Raghavendra K T +Rahul Zoldyck +Ravi Shekhar Jethani +Ray Tsang +Reficul +Remy Suen +Renaud Gaubert +Ricardo N Feliciano +Rich Moyse +Richard Mathie +Richard Scothern +Rick Wieman +Ritesh H Shukla +Riyaz Faizullabhoy +Rob Gulewich +Robert Wallis +Robin Naundorf +Robin Speekenbrink +Rodolfo Ortiz +Rogelio Canedo +Rohan Verma +Roland Kammerer +Roman Dudin +Rory Hunter +Ross Boucher +Rubens Figueiredo +Rui Cao +Ryan Belgrave +Ryan Detzel +Ryan Stelly +Ryan Wilson-Perkin +Ryan Zhang +Sainath Grandhi +Sakeven Jiang +Sally O'Malley +Sam Neirinck +Samarth Shah +Sambuddha Basu +Sami Tabet +Samuel Cochran +Samuel Karp +Santhosh Manohar +Sargun Dhillon +Saswat Bhattacharya +Scott Brenner +Scott Collier +Sean Christopherson +Sean Rodman +Sebastiaan van Stijn +Sergey Tryuber +Serhat Gülçiçek +Sevki Hasirci +Shaun Kaasten +Sheng Yang +Shijiang Wei +Shishir Mahajan +Shoubhik Bose +Shukui Yang +Sian Lerk Lau +Sidhartha Mani +sidharthamani +Silvin Lubecki +Simei He +Simon Ferquel +Simon Heimberg +Sindhu S +Slava Semushin +Solomon Hykes +Song Gao +Spencer Brown +squeegels <1674195+squeegels@users.noreply.github.com> +Srini Brahmaroutu +Stefan S. +Stefan Scherer +Stefan Weil +Stephane Jeandeaux +Stephen Day +Stephen Rust +Steve Durrheimer +Steve Richards +Steven Burgess +Subhajit Ghosh +Sun Jianbo +Sune Keller +Sungwon Han +Sunny Gogoi +Sven Dowideit +Sylvain Baubeau +Sébastien HOUZÉ +T K Sourabh +TAGOMORI Satoshi +taiji-tech +Taylor Jones +Tejaswini Duggaraju +Tengfei Wang +Teppei Fukuda +Thatcher Peskens +Thibault Coupin +Thomas Gazagnaire +Thomas Krzero +Thomas Leonard +Thomas Léveil +Thomas Riccardi +Thomas Swift +Tianon Gravi +Tianyi Wang +Tibor Vass +Tim Dettrick +Tim Hockin +Tim Sampson +Tim Smith +Tim Waugh +Tim Wraight +timfeirg +Timothy Hobbs +Tobias Bradtke +Tobias Gesellchen +Todd Whiteman +Tom Denham +Tom Fotherby +Tom Klingenberg +Tom Milligan +Tom X. Tobin +Tomas Tomecek +Tomasz Kopczynski +Tomáš Hrčka +Tony Abboud +Tõnis Tiigi +Trapier Marshall +Travis Cline +Tristan Carel +Tycho Andersen +Tycho Andersen +uhayate +Ulrich Bareth +Ulysses Souza +Umesh Yadav +Valentin Lorentz +Venkateswara Reddy Bukkasamudram +Veres Lajos +Victor Vieux +Victoria Bialas +Viktor Stanchev +Vimal Raghubir +Vincent Batts +Vincent Bernat +Vincent Demeester +Vincent Woo +Vishnu Kannan +Vivek Goyal +Wang Jie +Wang Lei +Wang Long +Wang Ping +Wang Xing +Wang Yuexiao +Wang Yumu <37442693@qq.com> +Wataru Ishida +Wayne Song +Wen Cheng Ma +Wenzhi Liang +Wes Morgan +Wewang Xiaorenfine +William Henry +Xianglin Gao +Xiaodong Liu +Xiaodong Zhang +Xiaoxi He +Xinbo Weng +Xuecong Liao +Yan Feng +Yanqiang Miao +Yassine Tijani +Yi EungJun +Ying Li +Yong Tang +Yosef Fertel +Yu Peng +Yuan Sun +Yue Zhang +Yunxiang Huang +Zachary Romero +Zander Mackie +zebrilee +Zhang Kun +Zhang Wei +Zhang Wentao +ZhangHang +zhenghenghuo +Zhou Hao +Zhoulin Xie +Zhu Guihua +Álex González +Álvaro Lázaro +Átila Camurça Alves +徐俊杰 diff --git a/vendor/github.com/docker/cli/LICENSE b/vendor/github.com/docker/cli/LICENSE new file mode 100644 index 0000000..9c8e20a --- /dev/null +++ b/vendor/github.com/docker/cli/LICENSE @@ -0,0 +1,191 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2013-2017 Docker, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/docker/cli/NOTICE b/vendor/github.com/docker/cli/NOTICE new file mode 100644 index 0000000..58b19b6 --- /dev/null +++ b/vendor/github.com/docker/cli/NOTICE @@ -0,0 +1,19 @@ +Docker +Copyright 2012-2017 Docker, Inc. + +This product includes software developed at Docker, Inc. (https://www.docker.com). + +This product contains software (https://github.com/creack/pty) developed +by Keith Rarick, licensed under the MIT License. + +The following is courtesy of our legal counsel: + + +Use and transfer of Docker may be subject to certain restrictions by the +United States and other governments. +It is your responsibility to ensure that your use and/or transfer does not +violate applicable laws. + +For more information, please see https://www.bis.doc.gov + +See also https://www.apache.org/dev/crypto.html and/or seek legal counsel. diff --git a/vendor/github.com/docker/cli/cli/config/config.go b/vendor/github.com/docker/cli/cli/config/config.go new file mode 100644 index 0000000..31ad117 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/config.go @@ -0,0 +1,167 @@ +package config + +import ( + "fmt" + "io" + "os" + "path/filepath" + "strings" + "sync" + + "github.com/docker/cli/cli/config/configfile" + "github.com/docker/cli/cli/config/credentials" + "github.com/docker/cli/cli/config/types" + "github.com/docker/docker/pkg/homedir" + "github.com/pkg/errors" +) + +const ( + // ConfigFileName is the name of config file + ConfigFileName = "config.json" + configFileDir = ".docker" + oldConfigfile = ".dockercfg" + contextsDir = "contexts" +) + +var ( + initConfigDir = new(sync.Once) + configDir string + homeDir string +) + +// resetHomeDir is used in testing to reset the "homeDir" package variable to +// force re-lookup of the home directory between tests. +func resetHomeDir() { + homeDir = "" +} + +func getHomeDir() string { + if homeDir == "" { + homeDir = homedir.Get() + } + return homeDir +} + +// resetConfigDir is used in testing to reset the "configDir" package variable +// and its sync.Once to force re-lookup between tests. +func resetConfigDir() { + configDir = "" + initConfigDir = new(sync.Once) +} + +func setConfigDir() { + if configDir != "" { + return + } + configDir = os.Getenv("DOCKER_CONFIG") + if configDir == "" { + configDir = filepath.Join(getHomeDir(), configFileDir) + } +} + +// Dir returns the directory the configuration file is stored in +func Dir() string { + initConfigDir.Do(setConfigDir) + return configDir +} + +// ContextStoreDir returns the directory the docker contexts are stored in +func ContextStoreDir() string { + return filepath.Join(Dir(), contextsDir) +} + +// SetDir sets the directory the configuration file is stored in +func SetDir(dir string) { + configDir = filepath.Clean(dir) +} + +// Path returns the path to a file relative to the config dir +func Path(p ...string) (string, error) { + path := filepath.Join(append([]string{Dir()}, p...)...) + if !strings.HasPrefix(path, Dir()+string(filepath.Separator)) { + return "", errors.Errorf("path %q is outside of root config directory %q", path, Dir()) + } + return path, nil +} + +// LegacyLoadFromReader is a convenience function that creates a ConfigFile object from +// a non-nested reader +func LegacyLoadFromReader(configData io.Reader) (*configfile.ConfigFile, error) { + configFile := configfile.ConfigFile{ + AuthConfigs: make(map[string]types.AuthConfig), + } + err := configFile.LegacyLoadFromReader(configData) + return &configFile, err +} + +// LoadFromReader is a convenience function that creates a ConfigFile object from +// a reader +func LoadFromReader(configData io.Reader) (*configfile.ConfigFile, error) { + configFile := configfile.ConfigFile{ + AuthConfigs: make(map[string]types.AuthConfig), + } + err := configFile.LoadFromReader(configData) + return &configFile, err +} + +// Load reads the configuration files in the given directory, and sets up +// the auth config information and returns values. +// FIXME: use the internal golang config parser +func Load(configDir string) (*configfile.ConfigFile, error) { + cfg, _, err := load(configDir) + return cfg, err +} + +// TODO remove this temporary hack, which is used to warn about the deprecated ~/.dockercfg file +// so we can remove the bool return value and collapse this back into `Load` +func load(configDir string) (*configfile.ConfigFile, bool, error) { + printLegacyFileWarning := false + + if configDir == "" { + configDir = Dir() + } + + filename := filepath.Join(configDir, ConfigFileName) + configFile := configfile.New(filename) + + // Try happy path first - latest config file + if file, err := os.Open(filename); err == nil { + defer file.Close() + err = configFile.LoadFromReader(file) + if err != nil { + err = errors.Wrap(err, filename) + } + return configFile, printLegacyFileWarning, err + } else if !os.IsNotExist(err) { + // if file is there but we can't stat it for any reason other + // than it doesn't exist then stop + return configFile, printLegacyFileWarning, errors.Wrap(err, filename) + } + + // Can't find latest config file so check for the old one + filename = filepath.Join(getHomeDir(), oldConfigfile) + if file, err := os.Open(filename); err == nil { + printLegacyFileWarning = true + defer file.Close() + if err := configFile.LegacyLoadFromReader(file); err != nil { + return configFile, printLegacyFileWarning, errors.Wrap(err, filename) + } + } + return configFile, printLegacyFileWarning, nil +} + +// LoadDefaultConfigFile attempts to load the default config file and returns +// an initialized ConfigFile struct if none is found. +func LoadDefaultConfigFile(stderr io.Writer) *configfile.ConfigFile { + configFile, printLegacyFileWarning, err := load(Dir()) + if err != nil { + fmt.Fprintf(stderr, "WARNING: Error loading config file: %v\n", err) + } + if printLegacyFileWarning { + _, _ = fmt.Fprintln(stderr, "WARNING: Support for the legacy ~/.dockercfg configuration file and file-format is deprecated and will be removed in an upcoming release") + } + if !configFile.ContainsAuth() { + configFile.CredentialsStore = credentials.DetectDefaultStore(configFile.CredentialsStore) + } + return configFile +} diff --git a/vendor/github.com/docker/cli/cli/config/configfile/file.go b/vendor/github.com/docker/cli/cli/config/configfile/file.go new file mode 100644 index 0000000..d6f7108 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/configfile/file.go @@ -0,0 +1,415 @@ +package configfile + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + + "github.com/docker/cli/cli/config/credentials" + "github.com/docker/cli/cli/config/types" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" +) + +const ( + // This constant is only used for really old config files when the + // URL wasn't saved as part of the config file and it was just + // assumed to be this value. + defaultIndexServer = "https://index.docker.io/v1/" +) + +// ConfigFile ~/.docker/config.json file info +type ConfigFile struct { + AuthConfigs map[string]types.AuthConfig `json:"auths"` + HTTPHeaders map[string]string `json:"HttpHeaders,omitempty"` + PsFormat string `json:"psFormat,omitempty"` + ImagesFormat string `json:"imagesFormat,omitempty"` + NetworksFormat string `json:"networksFormat,omitempty"` + PluginsFormat string `json:"pluginsFormat,omitempty"` + VolumesFormat string `json:"volumesFormat,omitempty"` + StatsFormat string `json:"statsFormat,omitempty"` + DetachKeys string `json:"detachKeys,omitempty"` + CredentialsStore string `json:"credsStore,omitempty"` + CredentialHelpers map[string]string `json:"credHelpers,omitempty"` + Filename string `json:"-"` // Note: for internal use only + ServiceInspectFormat string `json:"serviceInspectFormat,omitempty"` + ServicesFormat string `json:"servicesFormat,omitempty"` + TasksFormat string `json:"tasksFormat,omitempty"` + SecretFormat string `json:"secretFormat,omitempty"` + ConfigFormat string `json:"configFormat,omitempty"` + NodesFormat string `json:"nodesFormat,omitempty"` + PruneFilters []string `json:"pruneFilters,omitempty"` + Proxies map[string]ProxyConfig `json:"proxies,omitempty"` + Experimental string `json:"experimental,omitempty"` + StackOrchestrator string `json:"stackOrchestrator,omitempty"` + Kubernetes *KubernetesConfig `json:"kubernetes,omitempty"` + CurrentContext string `json:"currentContext,omitempty"` + CLIPluginsExtraDirs []string `json:"cliPluginsExtraDirs,omitempty"` + Plugins map[string]map[string]string `json:"plugins,omitempty"` + Aliases map[string]string `json:"aliases,omitempty"` +} + +// ProxyConfig contains proxy configuration settings +type ProxyConfig struct { + HTTPProxy string `json:"httpProxy,omitempty"` + HTTPSProxy string `json:"httpsProxy,omitempty"` + NoProxy string `json:"noProxy,omitempty"` + FTPProxy string `json:"ftpProxy,omitempty"` +} + +// KubernetesConfig contains Kubernetes orchestrator settings +type KubernetesConfig struct { + AllNamespaces string `json:"allNamespaces,omitempty"` +} + +// New initializes an empty configuration file for the given filename 'fn' +func New(fn string) *ConfigFile { + return &ConfigFile{ + AuthConfigs: make(map[string]types.AuthConfig), + HTTPHeaders: make(map[string]string), + Filename: fn, + Plugins: make(map[string]map[string]string), + Aliases: make(map[string]string), + } +} + +// LegacyLoadFromReader reads the non-nested configuration data given and sets up the +// auth config information with given directory and populates the receiver object +func (configFile *ConfigFile) LegacyLoadFromReader(configData io.Reader) error { + b, err := ioutil.ReadAll(configData) + if err != nil { + return err + } + + if err := json.Unmarshal(b, &configFile.AuthConfigs); err != nil { + arr := strings.Split(string(b), "\n") + if len(arr) < 2 { + return errors.Errorf("The Auth config file is empty") + } + authConfig := types.AuthConfig{} + origAuth := strings.Split(arr[0], " = ") + if len(origAuth) != 2 { + return errors.Errorf("Invalid Auth config file") + } + authConfig.Username, authConfig.Password, err = decodeAuth(origAuth[1]) + if err != nil { + return err + } + authConfig.ServerAddress = defaultIndexServer + configFile.AuthConfigs[defaultIndexServer] = authConfig + } else { + for k, authConfig := range configFile.AuthConfigs { + authConfig.Username, authConfig.Password, err = decodeAuth(authConfig.Auth) + if err != nil { + return err + } + authConfig.Auth = "" + authConfig.ServerAddress = k + configFile.AuthConfigs[k] = authConfig + } + } + return nil +} + +// LoadFromReader reads the configuration data given and sets up the auth config +// information with given directory and populates the receiver object +func (configFile *ConfigFile) LoadFromReader(configData io.Reader) error { + if err := json.NewDecoder(configData).Decode(configFile); err != nil && !errors.Is(err, io.EOF) { + return err + } + var err error + for addr, ac := range configFile.AuthConfigs { + if ac.Auth != "" { + ac.Username, ac.Password, err = decodeAuth(ac.Auth) + if err != nil { + return err + } + } + ac.Auth = "" + ac.ServerAddress = addr + configFile.AuthConfigs[addr] = ac + } + return checkKubernetesConfiguration(configFile.Kubernetes) +} + +// ContainsAuth returns whether there is authentication configured +// in this file or not. +func (configFile *ConfigFile) ContainsAuth() bool { + return configFile.CredentialsStore != "" || + len(configFile.CredentialHelpers) > 0 || + len(configFile.AuthConfigs) > 0 +} + +// GetAuthConfigs returns the mapping of repo to auth configuration +func (configFile *ConfigFile) GetAuthConfigs() map[string]types.AuthConfig { + return configFile.AuthConfigs +} + +// SaveToWriter encodes and writes out all the authorization information to +// the given writer +func (configFile *ConfigFile) SaveToWriter(writer io.Writer) error { + // Encode sensitive data into a new/temp struct + tmpAuthConfigs := make(map[string]types.AuthConfig, len(configFile.AuthConfigs)) + for k, authConfig := range configFile.AuthConfigs { + authCopy := authConfig + // encode and save the authstring, while blanking out the original fields + authCopy.Auth = encodeAuth(&authCopy) + authCopy.Username = "" + authCopy.Password = "" + authCopy.ServerAddress = "" + tmpAuthConfigs[k] = authCopy + } + + saveAuthConfigs := configFile.AuthConfigs + configFile.AuthConfigs = tmpAuthConfigs + defer func() { configFile.AuthConfigs = saveAuthConfigs }() + + // User-Agent header is automatically set, and should not be stored in the configuration + for v := range configFile.HTTPHeaders { + if strings.EqualFold(v, "User-Agent") { + delete(configFile.HTTPHeaders, v) + } + } + + data, err := json.MarshalIndent(configFile, "", "\t") + if err != nil { + return err + } + _, err = writer.Write(data) + return err +} + +// Save encodes and writes out all the authorization information +func (configFile *ConfigFile) Save() (retErr error) { + if configFile.Filename == "" { + return errors.Errorf("Can't save config with empty filename") + } + + dir := filepath.Dir(configFile.Filename) + if err := os.MkdirAll(dir, 0700); err != nil { + return err + } + temp, err := ioutil.TempFile(dir, filepath.Base(configFile.Filename)) + if err != nil { + return err + } + defer func() { + temp.Close() + if retErr != nil { + if err := os.Remove(temp.Name()); err != nil { + logrus.WithError(err).WithField("file", temp.Name()).Debug("Error cleaning up temp file") + } + } + }() + + err = configFile.SaveToWriter(temp) + if err != nil { + return err + } + + if err := temp.Close(); err != nil { + return errors.Wrap(err, "error closing temp file") + } + + // Handle situation where the configfile is a symlink + cfgFile := configFile.Filename + if f, err := os.Readlink(cfgFile); err == nil { + cfgFile = f + } + + // Try copying the current config file (if any) ownership and permissions + copyFilePermissions(cfgFile, temp.Name()) + return os.Rename(temp.Name(), cfgFile) +} + +// ParseProxyConfig computes proxy configuration by retrieving the config for the provided host and +// then checking this against any environment variables provided to the container +func (configFile *ConfigFile) ParseProxyConfig(host string, runOpts map[string]*string) map[string]*string { + var cfgKey string + + if _, ok := configFile.Proxies[host]; !ok { + cfgKey = "default" + } else { + cfgKey = host + } + + config := configFile.Proxies[cfgKey] + permitted := map[string]*string{ + "HTTP_PROXY": &config.HTTPProxy, + "HTTPS_PROXY": &config.HTTPSProxy, + "NO_PROXY": &config.NoProxy, + "FTP_PROXY": &config.FTPProxy, + } + m := runOpts + if m == nil { + m = make(map[string]*string) + } + for k := range permitted { + if *permitted[k] == "" { + continue + } + if _, ok := m[k]; !ok { + m[k] = permitted[k] + } + if _, ok := m[strings.ToLower(k)]; !ok { + m[strings.ToLower(k)] = permitted[k] + } + } + return m +} + +// encodeAuth creates a base64 encoded string to containing authorization information +func encodeAuth(authConfig *types.AuthConfig) string { + if authConfig.Username == "" && authConfig.Password == "" { + return "" + } + + authStr := authConfig.Username + ":" + authConfig.Password + msg := []byte(authStr) + encoded := make([]byte, base64.StdEncoding.EncodedLen(len(msg))) + base64.StdEncoding.Encode(encoded, msg) + return string(encoded) +} + +// decodeAuth decodes a base64 encoded string and returns username and password +func decodeAuth(authStr string) (string, string, error) { + if authStr == "" { + return "", "", nil + } + + decLen := base64.StdEncoding.DecodedLen(len(authStr)) + decoded := make([]byte, decLen) + authByte := []byte(authStr) + n, err := base64.StdEncoding.Decode(decoded, authByte) + if err != nil { + return "", "", err + } + if n > decLen { + return "", "", errors.Errorf("Something went wrong decoding auth config") + } + arr := strings.SplitN(string(decoded), ":", 2) + if len(arr) != 2 { + return "", "", errors.Errorf("Invalid auth configuration file") + } + password := strings.Trim(arr[1], "\x00") + return arr[0], password, nil +} + +// GetCredentialsStore returns a new credentials store from the settings in the +// configuration file +func (configFile *ConfigFile) GetCredentialsStore(registryHostname string) credentials.Store { + if helper := getConfiguredCredentialStore(configFile, registryHostname); helper != "" { + return newNativeStore(configFile, helper) + } + return credentials.NewFileStore(configFile) +} + +// var for unit testing. +var newNativeStore = func(configFile *ConfigFile, helperSuffix string) credentials.Store { + return credentials.NewNativeStore(configFile, helperSuffix) +} + +// GetAuthConfig for a repository from the credential store +func (configFile *ConfigFile) GetAuthConfig(registryHostname string) (types.AuthConfig, error) { + return configFile.GetCredentialsStore(registryHostname).Get(registryHostname) +} + +// getConfiguredCredentialStore returns the credential helper configured for the +// given registry, the default credsStore, or the empty string if neither are +// configured. +func getConfiguredCredentialStore(c *ConfigFile, registryHostname string) string { + if c.CredentialHelpers != nil && registryHostname != "" { + if helper, exists := c.CredentialHelpers[registryHostname]; exists { + return helper + } + } + return c.CredentialsStore +} + +// GetAllCredentials returns all of the credentials stored in all of the +// configured credential stores. +func (configFile *ConfigFile) GetAllCredentials() (map[string]types.AuthConfig, error) { + auths := make(map[string]types.AuthConfig) + addAll := func(from map[string]types.AuthConfig) { + for reg, ac := range from { + auths[reg] = ac + } + } + + defaultStore := configFile.GetCredentialsStore("") + newAuths, err := defaultStore.GetAll() + if err != nil { + return nil, err + } + addAll(newAuths) + + // Auth configs from a registry-specific helper should override those from the default store. + for registryHostname := range configFile.CredentialHelpers { + newAuth, err := configFile.GetAuthConfig(registryHostname) + if err != nil { + return nil, err + } + auths[registryHostname] = newAuth + } + return auths, nil +} + +// GetFilename returns the file name that this config file is based on. +func (configFile *ConfigFile) GetFilename() string { + return configFile.Filename +} + +// PluginConfig retrieves the requested option for the given plugin. +func (configFile *ConfigFile) PluginConfig(pluginname, option string) (string, bool) { + if configFile.Plugins == nil { + return "", false + } + pluginConfig, ok := configFile.Plugins[pluginname] + if !ok { + return "", false + } + value, ok := pluginConfig[option] + return value, ok +} + +// SetPluginConfig sets the option to the given value for the given +// plugin. Passing a value of "" will remove the option. If removing +// the final config item for a given plugin then also cleans up the +// overall plugin entry. +func (configFile *ConfigFile) SetPluginConfig(pluginname, option, value string) { + if configFile.Plugins == nil { + configFile.Plugins = make(map[string]map[string]string) + } + pluginConfig, ok := configFile.Plugins[pluginname] + if !ok { + pluginConfig = make(map[string]string) + configFile.Plugins[pluginname] = pluginConfig + } + if value != "" { + pluginConfig[option] = value + } else { + delete(pluginConfig, option) + } + if len(pluginConfig) == 0 { + delete(configFile.Plugins, pluginname) + } +} + +func checkKubernetesConfiguration(kubeConfig *KubernetesConfig) error { + if kubeConfig == nil { + return nil + } + switch kubeConfig.AllNamespaces { + case "": + case "enabled": + case "disabled": + default: + return fmt.Errorf("invalid 'kubernetes.allNamespaces' value, should be 'enabled' or 'disabled': %s", kubeConfig.AllNamespaces) + } + return nil +} diff --git a/vendor/github.com/docker/cli/cli/config/configfile/file_unix.go b/vendor/github.com/docker/cli/cli/config/configfile/file_unix.go new file mode 100644 index 0000000..6af6718 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/configfile/file_unix.go @@ -0,0 +1,36 @@ +//go:build !windows +// +build !windows + +package configfile + +import ( + "os" + "syscall" +) + +// copyFilePermissions copies file ownership and permissions from "src" to "dst", +// ignoring any error during the process. +func copyFilePermissions(src, dst string) { + var ( + mode os.FileMode = 0600 + uid, gid int + ) + + fi, err := os.Stat(src) + if err != nil { + return + } + if fi.Mode().IsRegular() { + mode = fi.Mode() + } + if err := os.Chmod(dst, mode); err != nil { + return + } + + uid = int(fi.Sys().(*syscall.Stat_t).Uid) + gid = int(fi.Sys().(*syscall.Stat_t).Gid) + + if uid > 0 && gid > 0 { + _ = os.Chown(dst, uid, gid) + } +} diff --git a/vendor/github.com/docker/cli/cli/config/configfile/file_windows.go b/vendor/github.com/docker/cli/cli/config/configfile/file_windows.go new file mode 100644 index 0000000..42fffc3 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/configfile/file_windows.go @@ -0,0 +1,5 @@ +package configfile + +func copyFilePermissions(src, dst string) { + // TODO implement for Windows +} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/credentials.go b/vendor/github.com/docker/cli/cli/config/credentials/credentials.go new file mode 100644 index 0000000..28d58ec --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/credentials/credentials.go @@ -0,0 +1,17 @@ +package credentials + +import ( + "github.com/docker/cli/cli/config/types" +) + +// Store is the interface that any credentials store must implement. +type Store interface { + // Erase removes credentials from the store for a given server. + Erase(serverAddress string) error + // Get retrieves credentials from the store for a given server. + Get(serverAddress string) (types.AuthConfig, error) + // GetAll retrieves all the credentials from the store. + GetAll() (map[string]types.AuthConfig, error) + // Store saves credentials in the store. + Store(authConfig types.AuthConfig) error +} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/default_store.go b/vendor/github.com/docker/cli/cli/config/credentials/default_store.go new file mode 100644 index 0000000..402235b --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/credentials/default_store.go @@ -0,0 +1,21 @@ +package credentials + +import ( + exec "golang.org/x/sys/execabs" +) + +// DetectDefaultStore return the default credentials store for the platform if +// the store executable is available. +func DetectDefaultStore(store string) string { + platformDefault := defaultCredentialsStore() + + // user defined or no default for platform + if store != "" || platformDefault == "" { + return store + } + + if _, err := exec.LookPath(remoteCredentialsPrefix + platformDefault); err == nil { + return platformDefault + } + return "" +} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go b/vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go new file mode 100644 index 0000000..5d42dec --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go @@ -0,0 +1,5 @@ +package credentials + +func defaultCredentialsStore() string { + return "osxkeychain" +} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go b/vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go new file mode 100644 index 0000000..a9012c6 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go @@ -0,0 +1,13 @@ +package credentials + +import ( + "os/exec" +) + +func defaultCredentialsStore() string { + if _, err := exec.LookPath("pass"); err == nil { + return "pass" + } + + return "secretservice" +} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go b/vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go new file mode 100644 index 0000000..c9630ea --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go @@ -0,0 +1,8 @@ +//go:build !windows && !darwin && !linux +// +build !windows,!darwin,!linux + +package credentials + +func defaultCredentialsStore() string { + return "" +} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go b/vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go new file mode 100644 index 0000000..bb799ca --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go @@ -0,0 +1,5 @@ +package credentials + +func defaultCredentialsStore() string { + return "wincred" +} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/file_store.go b/vendor/github.com/docker/cli/cli/config/credentials/file_store.go new file mode 100644 index 0000000..e509820 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/credentials/file_store.go @@ -0,0 +1,81 @@ +package credentials + +import ( + "strings" + + "github.com/docker/cli/cli/config/types" +) + +type store interface { + Save() error + GetAuthConfigs() map[string]types.AuthConfig + GetFilename() string +} + +// fileStore implements a credentials store using +// the docker configuration file to keep the credentials in plain text. +type fileStore struct { + file store +} + +// NewFileStore creates a new file credentials store. +func NewFileStore(file store) Store { + return &fileStore{file: file} +} + +// Erase removes the given credentials from the file store. +func (c *fileStore) Erase(serverAddress string) error { + delete(c.file.GetAuthConfigs(), serverAddress) + return c.file.Save() +} + +// Get retrieves credentials for a specific server from the file store. +func (c *fileStore) Get(serverAddress string) (types.AuthConfig, error) { + authConfig, ok := c.file.GetAuthConfigs()[serverAddress] + if !ok { + // Maybe they have a legacy config file, we will iterate the keys converting + // them to the new format and testing + for r, ac := range c.file.GetAuthConfigs() { + if serverAddress == ConvertToHostname(r) { + return ac, nil + } + } + + authConfig = types.AuthConfig{} + } + return authConfig, nil +} + +func (c *fileStore) GetAll() (map[string]types.AuthConfig, error) { + return c.file.GetAuthConfigs(), nil +} + +// Store saves the given credentials in the file store. +func (c *fileStore) Store(authConfig types.AuthConfig) error { + c.file.GetAuthConfigs()[authConfig.ServerAddress] = authConfig + return c.file.Save() +} + +func (c *fileStore) GetFilename() string { + return c.file.GetFilename() +} + +func (c *fileStore) IsFileStore() bool { + return true +} + +// ConvertToHostname converts a registry url which has http|https prepended +// to just an hostname. +// Copied from github.com/docker/docker/registry.ConvertToHostname to reduce dependencies. +func ConvertToHostname(url string) string { + stripped := url + if strings.HasPrefix(url, "http://") { + stripped = strings.TrimPrefix(url, "http://") + } else if strings.HasPrefix(url, "https://") { + stripped = strings.TrimPrefix(url, "https://") + } + + nameParts := strings.SplitN(stripped, "/", 2) + + return nameParts[0] +} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/native_store.go b/vendor/github.com/docker/cli/cli/config/credentials/native_store.go new file mode 100644 index 0000000..afe542c --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/credentials/native_store.go @@ -0,0 +1,143 @@ +package credentials + +import ( + "github.com/docker/cli/cli/config/types" + "github.com/docker/docker-credential-helpers/client" + "github.com/docker/docker-credential-helpers/credentials" +) + +const ( + remoteCredentialsPrefix = "docker-credential-" + tokenUsername = "" +) + +// nativeStore implements a credentials store +// using native keychain to keep credentials secure. +// It piggybacks into a file store to keep users' emails. +type nativeStore struct { + programFunc client.ProgramFunc + fileStore Store +} + +// NewNativeStore creates a new native store that +// uses a remote helper program to manage credentials. +func NewNativeStore(file store, helperSuffix string) Store { + name := remoteCredentialsPrefix + helperSuffix + return &nativeStore{ + programFunc: client.NewShellProgramFunc(name), + fileStore: NewFileStore(file), + } +} + +// Erase removes the given credentials from the native store. +func (c *nativeStore) Erase(serverAddress string) error { + if err := client.Erase(c.programFunc, serverAddress); err != nil { + return err + } + + // Fallback to plain text store to remove email + return c.fileStore.Erase(serverAddress) +} + +// Get retrieves credentials for a specific server from the native store. +func (c *nativeStore) Get(serverAddress string) (types.AuthConfig, error) { + // load user email if it exist or an empty auth config. + auth, _ := c.fileStore.Get(serverAddress) + + creds, err := c.getCredentialsFromStore(serverAddress) + if err != nil { + return auth, err + } + auth.Username = creds.Username + auth.IdentityToken = creds.IdentityToken + auth.Password = creds.Password + + return auth, nil +} + +// GetAll retrieves all the credentials from the native store. +func (c *nativeStore) GetAll() (map[string]types.AuthConfig, error) { + auths, err := c.listCredentialsInStore() + if err != nil { + return nil, err + } + + // Emails are only stored in the file store. + // This call can be safely eliminated when emails are removed. + fileConfigs, _ := c.fileStore.GetAll() + + authConfigs := make(map[string]types.AuthConfig) + for registry := range auths { + creds, err := c.getCredentialsFromStore(registry) + if err != nil { + return nil, err + } + ac := fileConfigs[registry] // might contain Email + ac.Username = creds.Username + ac.Password = creds.Password + ac.IdentityToken = creds.IdentityToken + authConfigs[registry] = ac + } + + return authConfigs, nil +} + +// Store saves the given credentials in the file store. +func (c *nativeStore) Store(authConfig types.AuthConfig) error { + if err := c.storeCredentialsInStore(authConfig); err != nil { + return err + } + authConfig.Username = "" + authConfig.Password = "" + authConfig.IdentityToken = "" + + // Fallback to old credential in plain text to save only the email + return c.fileStore.Store(authConfig) +} + +// storeCredentialsInStore executes the command to store the credentials in the native store. +func (c *nativeStore) storeCredentialsInStore(config types.AuthConfig) error { + creds := &credentials.Credentials{ + ServerURL: config.ServerAddress, + Username: config.Username, + Secret: config.Password, + } + + if config.IdentityToken != "" { + creds.Username = tokenUsername + creds.Secret = config.IdentityToken + } + + return client.Store(c.programFunc, creds) +} + +// getCredentialsFromStore executes the command to get the credentials from the native store. +func (c *nativeStore) getCredentialsFromStore(serverAddress string) (types.AuthConfig, error) { + var ret types.AuthConfig + + creds, err := client.Get(c.programFunc, serverAddress) + if err != nil { + if credentials.IsErrCredentialsNotFound(err) { + // do not return an error if the credentials are not + // in the keychain. Let docker ask for new credentials. + return ret, nil + } + return ret, err + } + + if creds.Username == tokenUsername { + ret.IdentityToken = creds.Secret + } else { + ret.Password = creds.Secret + ret.Username = creds.Username + } + + ret.ServerAddress = serverAddress + return ret, nil +} + +// listCredentialsInStore returns a listing of stored credentials as a map of +// URL -> username. +func (c *nativeStore) listCredentialsInStore() (map[string]string, error) { + return client.List(c.programFunc) +} diff --git a/vendor/github.com/docker/cli/cli/config/types/authconfig.go b/vendor/github.com/docker/cli/cli/config/types/authconfig.go new file mode 100644 index 0000000..056af6b --- /dev/null +++ b/vendor/github.com/docker/cli/cli/config/types/authconfig.go @@ -0,0 +1,22 @@ +package types + +// AuthConfig contains authorization information for connecting to a Registry +type AuthConfig struct { + Username string `json:"username,omitempty"` + Password string `json:"password,omitempty"` + Auth string `json:"auth,omitempty"` + + // Email is an optional value associated with the username. + // This field is deprecated and will be removed in a later + // version of docker. + Email string `json:"email,omitempty"` + + ServerAddress string `json:"serveraddress,omitempty"` + + // IdentityToken is used to authenticate the user and get + // an access token for the registry. + IdentityToken string `json:"identitytoken,omitempty"` + + // RegistryToken is a bearer token to be sent to a registry + RegistryToken string `json:"registrytoken,omitempty"` +} diff --git a/vendor/github.com/docker/cli/cli/connhelper/commandconn/commandconn.go b/vendor/github.com/docker/cli/cli/connhelper/commandconn/commandconn.go new file mode 100644 index 0000000..128da44 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/connhelper/commandconn/commandconn.go @@ -0,0 +1,283 @@ +// Package commandconn provides a net.Conn implementation that can be used for +// proxying (or emulating) stream via a custom command. +// +// For example, to provide an http.Client that can connect to a Docker daemon +// running in a Docker container ("DIND"): +// +// httpClient := &http.Client{ +// Transport: &http.Transport{ +// DialContext: func(ctx context.Context, _network, _addr string) (net.Conn, error) { +// return commandconn.New(ctx, "docker", "exec", "-it", containerID, "docker", "system", "dial-stdio") +// }, +// }, +// } +package commandconn + +import ( + "bytes" + "context" + "fmt" + "io" + "net" + "os" + "runtime" + "strings" + "sync" + "syscall" + "time" + + "github.com/pkg/errors" + "github.com/sirupsen/logrus" + exec "golang.org/x/sys/execabs" +) + +// New returns net.Conn +func New(ctx context.Context, cmd string, args ...string) (net.Conn, error) { + var ( + c commandConn + err error + ) + c.cmd = exec.CommandContext(ctx, cmd, args...) + // we assume that args never contains sensitive information + logrus.Debugf("commandconn: starting %s with %v", cmd, args) + c.cmd.Env = os.Environ() + c.cmd.SysProcAttr = &syscall.SysProcAttr{} + setPdeathsig(c.cmd) + createSession(c.cmd) + c.stdin, err = c.cmd.StdinPipe() + if err != nil { + return nil, err + } + c.stdout, err = c.cmd.StdoutPipe() + if err != nil { + return nil, err + } + c.cmd.Stderr = &stderrWriter{ + stderrMu: &c.stderrMu, + stderr: &c.stderr, + debugPrefix: fmt.Sprintf("commandconn (%s):", cmd), + } + c.localAddr = dummyAddr{network: "dummy", s: "dummy-0"} + c.remoteAddr = dummyAddr{network: "dummy", s: "dummy-1"} + return &c, c.cmd.Start() +} + +// commandConn implements net.Conn +type commandConn struct { + cmd *exec.Cmd + cmdExited bool + cmdWaitErr error + cmdMutex sync.Mutex + stdin io.WriteCloser + stdout io.ReadCloser + stderrMu sync.Mutex + stderr bytes.Buffer + stdioClosedMu sync.Mutex // for stdinClosed and stdoutClosed + stdinClosed bool + stdoutClosed bool + localAddr net.Addr + remoteAddr net.Addr +} + +// killIfStdioClosed kills the cmd if both stdin and stdout are closed. +func (c *commandConn) killIfStdioClosed() error { + c.stdioClosedMu.Lock() + stdioClosed := c.stdoutClosed && c.stdinClosed + c.stdioClosedMu.Unlock() + if !stdioClosed { + return nil + } + return c.kill() +} + +// killAndWait tries sending SIGTERM to the process before sending SIGKILL. +func killAndWait(cmd *exec.Cmd) error { + var werr error + if runtime.GOOS != "windows" { + werrCh := make(chan error) + go func() { werrCh <- cmd.Wait() }() + cmd.Process.Signal(syscall.SIGTERM) + select { + case werr = <-werrCh: + case <-time.After(3 * time.Second): + cmd.Process.Kill() + werr = <-werrCh + } + } else { + cmd.Process.Kill() + werr = cmd.Wait() + } + return werr +} + +// kill returns nil if the command terminated, regardless to the exit status. +func (c *commandConn) kill() error { + var werr error + c.cmdMutex.Lock() + if c.cmdExited { + werr = c.cmdWaitErr + } else { + werr = killAndWait(c.cmd) + c.cmdWaitErr = werr + c.cmdExited = true + } + c.cmdMutex.Unlock() + if werr == nil { + return nil + } + wExitErr, ok := werr.(*exec.ExitError) + if ok { + if wExitErr.ProcessState.Exited() { + return nil + } + } + return errors.Wrapf(werr, "commandconn: failed to wait") +} + +func (c *commandConn) onEOF(eof error) error { + // when we got EOF, the command is going to be terminated + var werr error + c.cmdMutex.Lock() + if c.cmdExited { + werr = c.cmdWaitErr + } else { + werrCh := make(chan error) + go func() { werrCh <- c.cmd.Wait() }() + select { + case werr = <-werrCh: + c.cmdWaitErr = werr + c.cmdExited = true + case <-time.After(10 * time.Second): + c.cmdMutex.Unlock() + c.stderrMu.Lock() + stderr := c.stderr.String() + c.stderrMu.Unlock() + return errors.Errorf("command %v did not exit after %v: stderr=%q", c.cmd.Args, eof, stderr) + } + } + c.cmdMutex.Unlock() + if werr == nil { + return eof + } + c.stderrMu.Lock() + stderr := c.stderr.String() + c.stderrMu.Unlock() + return errors.Errorf("command %v has exited with %v, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=%s", c.cmd.Args, werr, stderr) +} + +func ignorableCloseError(err error) bool { + errS := err.Error() + ss := []string{ + os.ErrClosed.Error(), + } + for _, s := range ss { + if strings.Contains(errS, s) { + return true + } + } + return false +} + +func (c *commandConn) CloseRead() error { + // NOTE: maybe already closed here + if err := c.stdout.Close(); err != nil && !ignorableCloseError(err) { + logrus.Warnf("commandConn.CloseRead: %v", err) + } + c.stdioClosedMu.Lock() + c.stdoutClosed = true + c.stdioClosedMu.Unlock() + if err := c.killIfStdioClosed(); err != nil { + logrus.Warnf("commandConn.CloseRead: %v", err) + } + return nil +} + +func (c *commandConn) Read(p []byte) (int, error) { + n, err := c.stdout.Read(p) + if err == io.EOF { + err = c.onEOF(err) + } + return n, err +} + +func (c *commandConn) CloseWrite() error { + // NOTE: maybe already closed here + if err := c.stdin.Close(); err != nil && !ignorableCloseError(err) { + logrus.Warnf("commandConn.CloseWrite: %v", err) + } + c.stdioClosedMu.Lock() + c.stdinClosed = true + c.stdioClosedMu.Unlock() + if err := c.killIfStdioClosed(); err != nil { + logrus.Warnf("commandConn.CloseWrite: %v", err) + } + return nil +} + +func (c *commandConn) Write(p []byte) (int, error) { + n, err := c.stdin.Write(p) + if err == io.EOF { + err = c.onEOF(err) + } + return n, err +} + +func (c *commandConn) Close() error { + var err error + if err = c.CloseRead(); err != nil { + logrus.Warnf("commandConn.Close: CloseRead: %v", err) + } + if err = c.CloseWrite(); err != nil { + logrus.Warnf("commandConn.Close: CloseWrite: %v", err) + } + return err +} + +func (c *commandConn) LocalAddr() net.Addr { + return c.localAddr +} +func (c *commandConn) RemoteAddr() net.Addr { + return c.remoteAddr +} +func (c *commandConn) SetDeadline(t time.Time) error { + logrus.Debugf("unimplemented call: SetDeadline(%v)", t) + return nil +} +func (c *commandConn) SetReadDeadline(t time.Time) error { + logrus.Debugf("unimplemented call: SetReadDeadline(%v)", t) + return nil +} +func (c *commandConn) SetWriteDeadline(t time.Time) error { + logrus.Debugf("unimplemented call: SetWriteDeadline(%v)", t) + return nil +} + +type dummyAddr struct { + network string + s string +} + +func (d dummyAddr) Network() string { + return d.network +} + +func (d dummyAddr) String() string { + return d.s +} + +type stderrWriter struct { + stderrMu *sync.Mutex + stderr *bytes.Buffer + debugPrefix string +} + +func (w *stderrWriter) Write(p []byte) (int, error) { + logrus.Debugf("%s%s", w.debugPrefix, string(p)) + w.stderrMu.Lock() + if w.stderr.Len() > 4096 { + w.stderr.Reset() + } + n, err := w.stderr.Write(p) + w.stderrMu.Unlock() + return n, err +} diff --git a/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_linux.go b/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_linux.go new file mode 100644 index 0000000..1cdd788 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_linux.go @@ -0,0 +1,10 @@ +package commandconn + +import ( + "os/exec" + "syscall" +) + +func setPdeathsig(cmd *exec.Cmd) { + cmd.SysProcAttr.Pdeathsig = syscall.SIGKILL +} diff --git a/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_nolinux.go b/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_nolinux.go new file mode 100644 index 0000000..2adcf08 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_nolinux.go @@ -0,0 +1,11 @@ +//go:build !linux +// +build !linux + +package commandconn + +import ( + "os/exec" +) + +func setPdeathsig(cmd *exec.Cmd) { +} diff --git a/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_unix.go b/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_unix.go new file mode 100644 index 0000000..57bdece --- /dev/null +++ b/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_unix.go @@ -0,0 +1,14 @@ +//go:build !windows +// +build !windows + +package commandconn + +import ( + "os/exec" +) + +func createSession(cmd *exec.Cmd) { + // for supporting ssh connection helper with ProxyCommand + // https://github.com/docker/cli/issues/1707 + cmd.SysProcAttr.Setsid = true +} diff --git a/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_windows.go b/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_windows.go new file mode 100644 index 0000000..b926074 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_windows.go @@ -0,0 +1,8 @@ +package commandconn + +import ( + "os/exec" +) + +func createSession(cmd *exec.Cmd) { +} diff --git a/vendor/github.com/docker/cli/cli/connhelper/connhelper.go b/vendor/github.com/docker/cli/cli/connhelper/connhelper.go new file mode 100644 index 0000000..9ac9d67 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/connhelper/connhelper.go @@ -0,0 +1,68 @@ +// Package connhelper provides helpers for connecting to a remote daemon host with custom logic. +package connhelper + +import ( + "context" + "net" + "net/url" + + "github.com/docker/cli/cli/connhelper/commandconn" + "github.com/docker/cli/cli/connhelper/ssh" + "github.com/pkg/errors" +) + +// ConnectionHelper allows to connect to a remote host with custom stream provider binary. +type ConnectionHelper struct { + Dialer func(ctx context.Context, network, addr string) (net.Conn, error) + Host string // dummy URL used for HTTP requests. e.g. "http://docker" +} + +// GetConnectionHelper returns Docker-specific connection helper for the given URL. +// GetConnectionHelper returns nil without error when no helper is registered for the scheme. +// +// ssh://@ URL requires Docker 18.09 or later on the remote host. +func GetConnectionHelper(daemonURL string) (*ConnectionHelper, error) { + return getConnectionHelper(daemonURL, nil) +} + +// GetConnectionHelperWithSSHOpts returns Docker-specific connection helper for +// the given URL, and accepts additional options for ssh connections. It returns +// nil without error when no helper is registered for the scheme. +// +// Requires Docker 18.09 or later on the remote host. +func GetConnectionHelperWithSSHOpts(daemonURL string, sshFlags []string) (*ConnectionHelper, error) { + return getConnectionHelper(daemonURL, sshFlags) +} + +func getConnectionHelper(daemonURL string, sshFlags []string) (*ConnectionHelper, error) { + u, err := url.Parse(daemonURL) + if err != nil { + return nil, err + } + switch scheme := u.Scheme; scheme { + case "ssh": + sp, err := ssh.ParseURL(daemonURL) + if err != nil { + return nil, errors.Wrap(err, "ssh host connection is not valid") + } + return &ConnectionHelper{ + Dialer: func(ctx context.Context, network, addr string) (net.Conn, error) { + return commandconn.New(ctx, "ssh", append(sshFlags, sp.Args("docker", "system", "dial-stdio")...)...) + }, + Host: "http://docker.example.com", + }, nil + } + // Future version may support plugins via ~/.docker/config.json. e.g. "dind" + // See docker/cli#889 for the previous discussion. + return nil, err +} + +// GetCommandConnectionHelper returns Docker-specific connection helper constructed from an arbitrary command. +func GetCommandConnectionHelper(cmd string, flags ...string) (*ConnectionHelper, error) { + return &ConnectionHelper{ + Dialer: func(ctx context.Context, network, addr string) (net.Conn, error) { + return commandconn.New(ctx, cmd, flags...) + }, + Host: "http://docker.example.com", + }, nil +} diff --git a/vendor/github.com/docker/cli/cli/connhelper/ssh/ssh.go b/vendor/github.com/docker/cli/cli/connhelper/ssh/ssh.go new file mode 100644 index 0000000..bde01ae --- /dev/null +++ b/vendor/github.com/docker/cli/cli/connhelper/ssh/ssh.go @@ -0,0 +1,64 @@ +// Package ssh provides the connection helper for ssh:// URL. +package ssh + +import ( + "net/url" + + "github.com/pkg/errors" +) + +// ParseURL parses URL +func ParseURL(daemonURL string) (*Spec, error) { + u, err := url.Parse(daemonURL) + if err != nil { + return nil, err + } + if u.Scheme != "ssh" { + return nil, errors.Errorf("expected scheme ssh, got %q", u.Scheme) + } + + var sp Spec + + if u.User != nil { + sp.User = u.User.Username() + if _, ok := u.User.Password(); ok { + return nil, errors.New("plain-text password is not supported") + } + } + sp.Host = u.Hostname() + if sp.Host == "" { + return nil, errors.Errorf("no host specified") + } + sp.Port = u.Port() + if u.Path != "" { + return nil, errors.Errorf("extra path after the host: %q", u.Path) + } + if u.RawQuery != "" { + return nil, errors.Errorf("extra query after the host: %q", u.RawQuery) + } + if u.Fragment != "" { + return nil, errors.Errorf("extra fragment after the host: %q", u.Fragment) + } + return &sp, err +} + +// Spec of SSH URL +type Spec struct { + User string + Host string + Port string +} + +// Args returns args except "ssh" itself combined with optional additional command args +func (sp *Spec) Args(add ...string) []string { + var args []string + if sp.User != "" { + args = append(args, "-l", sp.User) + } + if sp.Port != "" { + args = append(args, "-p", sp.Port) + } + args = append(args, "--", sp.Host) + args = append(args, add...) + return args +} diff --git a/vendor/github.com/docker/cli/cli/context/docker/constants.go b/vendor/github.com/docker/cli/cli/context/docker/constants.go new file mode 100644 index 0000000..1db5556 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/context/docker/constants.go @@ -0,0 +1,6 @@ +package docker + +const ( + // DockerEndpoint is the name of the docker endpoint in a stored context + DockerEndpoint = "docker" +) diff --git a/vendor/github.com/docker/cli/cli/context/docker/load.go b/vendor/github.com/docker/cli/cli/context/docker/load.go new file mode 100644 index 0000000..ccfee02 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/context/docker/load.go @@ -0,0 +1,174 @@ +package docker + +import ( + "crypto/tls" + "crypto/x509" + "encoding/pem" + "fmt" + "net" + "net/http" + "os" + "time" + + "github.com/docker/cli/cli/connhelper" + "github.com/docker/cli/cli/context" + "github.com/docker/cli/cli/context/store" + "github.com/docker/docker/client" + "github.com/docker/go-connections/tlsconfig" + "github.com/pkg/errors" +) + +// EndpointMeta is a typed wrapper around a context-store generic endpoint describing +// a Docker Engine endpoint, without its tls config +type EndpointMeta = context.EndpointMetaBase + +// Endpoint is a typed wrapper around a context-store generic endpoint describing +// a Docker Engine endpoint, with its tls data +type Endpoint struct { + EndpointMeta + TLSData *context.TLSData + + // Deprecated: Use of encrypted TLS private keys has been deprecated, and + // will be removed in a future release. Golang has deprecated support for + // legacy PEM encryption (as specified in RFC 1423), as it is insecure by + // design (see https://go-review.googlesource.com/c/go/+/264159). + TLSPassword string +} + +// WithTLSData loads TLS materials for the endpoint +func WithTLSData(s store.Reader, contextName string, m EndpointMeta) (Endpoint, error) { + tlsData, err := context.LoadTLSData(s, contextName, DockerEndpoint) + if err != nil { + return Endpoint{}, err + } + return Endpoint{ + EndpointMeta: m, + TLSData: tlsData, + }, nil +} + +// tlsConfig extracts a context docker endpoint TLS config +func (c *Endpoint) tlsConfig() (*tls.Config, error) { + if c.TLSData == nil && !c.SkipTLSVerify { + // there is no specific tls config + return nil, nil + } + var tlsOpts []func(*tls.Config) + if c.TLSData != nil && c.TLSData.CA != nil { + certPool := x509.NewCertPool() + if !certPool.AppendCertsFromPEM(c.TLSData.CA) { + return nil, errors.New("failed to retrieve context tls info: ca.pem seems invalid") + } + tlsOpts = append(tlsOpts, func(cfg *tls.Config) { + cfg.RootCAs = certPool + }) + } + if c.TLSData != nil && c.TLSData.Key != nil && c.TLSData.Cert != nil { + keyBytes := c.TLSData.Key + pemBlock, _ := pem.Decode(keyBytes) + if pemBlock == nil { + return nil, fmt.Errorf("no valid private key found") + } + + var err error + // TODO should we follow Golang, and deprecate RFC 1423 encryption, and produce a warning (or just error)? see https://github.com/docker/cli/issues/3212 + if x509.IsEncryptedPEMBlock(pemBlock) { //nolint: staticcheck // SA1019: x509.IsEncryptedPEMBlock is deprecated, and insecure by design + keyBytes, err = x509.DecryptPEMBlock(pemBlock, []byte(c.TLSPassword)) //nolint: staticcheck // SA1019: x509.IsEncryptedPEMBlock is deprecated, and insecure by design + if err != nil { + return nil, errors.Wrap(err, "private key is encrypted, but could not decrypt it") + } + keyBytes = pem.EncodeToMemory(&pem.Block{Type: pemBlock.Type, Bytes: keyBytes}) + } + + x509cert, err := tls.X509KeyPair(c.TLSData.Cert, keyBytes) + if err != nil { + return nil, errors.Wrap(err, "failed to retrieve context tls info") + } + tlsOpts = append(tlsOpts, func(cfg *tls.Config) { + cfg.Certificates = []tls.Certificate{x509cert} + }) + } + if c.SkipTLSVerify { + tlsOpts = append(tlsOpts, func(cfg *tls.Config) { + cfg.InsecureSkipVerify = true + }) + } + return tlsconfig.ClientDefault(tlsOpts...), nil +} + +// ClientOpts returns a slice of Client options to configure an API client with this endpoint +func (c *Endpoint) ClientOpts() ([]client.Opt, error) { + var result []client.Opt + if c.Host != "" { + helper, err := connhelper.GetConnectionHelper(c.Host) + if err != nil { + return nil, err + } + if helper == nil { + tlsConfig, err := c.tlsConfig() + if err != nil { + return nil, err + } + result = append(result, + withHTTPClient(tlsConfig), + client.WithHost(c.Host), + ) + + } else { + httpClient := &http.Client{ + // No tls + // No proxy + Transport: &http.Transport{ + DialContext: helper.Dialer, + }, + } + result = append(result, + client.WithHTTPClient(httpClient), + client.WithHost(helper.Host), + client.WithDialContext(helper.Dialer), + ) + } + } + + version := os.Getenv("DOCKER_API_VERSION") + if version != "" { + result = append(result, client.WithVersion(version)) + } else { + result = append(result, client.WithAPIVersionNegotiation()) + } + return result, nil +} + +func withHTTPClient(tlsConfig *tls.Config) func(*client.Client) error { + return func(c *client.Client) error { + if tlsConfig == nil { + // Use the default HTTPClient + return nil + } + + httpClient := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: tlsConfig, + DialContext: (&net.Dialer{ + KeepAlive: 30 * time.Second, + Timeout: 30 * time.Second, + }).DialContext, + }, + CheckRedirect: client.CheckRedirect, + } + return client.WithHTTPClient(httpClient)(c) + } +} + +// EndpointFromContext parses a context docker endpoint metadata into a typed EndpointMeta structure +func EndpointFromContext(metadata store.Metadata) (EndpointMeta, error) { + ep, ok := metadata.Endpoints[DockerEndpoint] + if !ok { + return EndpointMeta{}, errors.New("cannot find docker endpoint in context") + } + typed, ok := ep.(EndpointMeta) + if !ok { + return EndpointMeta{}, errors.Errorf("endpoint %q is not of type EndpointMeta", DockerEndpoint) + } + return typed, nil +} diff --git a/vendor/github.com/docker/cli/cli/context/endpoint.go b/vendor/github.com/docker/cli/cli/context/endpoint.go new file mode 100644 index 0000000..f273524 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/context/endpoint.go @@ -0,0 +1,7 @@ +package context + +// EndpointMetaBase contains fields we expect to be common for most context endpoints +type EndpointMetaBase struct { + Host string `json:",omitempty"` + SkipTLSVerify bool +} diff --git a/vendor/github.com/docker/cli/cli/context/store/doc.go b/vendor/github.com/docker/cli/cli/context/store/doc.go new file mode 100644 index 0000000..5626a64 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/context/store/doc.go @@ -0,0 +1,22 @@ +// Package store provides a generic way to store credentials to connect to virtually any kind of remote system. +// The term `context` comes from the similar feature in Kubernetes kubectl config files. +// +// Conceptually, a context is a set of metadata and TLS data, that can be used to connect to various endpoints +// of a remote system. TLS data and metadata are stored separately, so that in the future, we will be able to store sensitive +// information in a more secure way, depending on the os we are running on (e.g.: on Windows we could use the user Certificate Store, on Mac OS the user Keychain...). +// +// Current implementation is purely file based with the following structure: +// ${CONTEXT_ROOT} +// - meta/ +// - /meta.json: contains context medata (key/value pairs) as well as a list of endpoints (themselves containing key/value pair metadata) +// - tls/ +// - /endpoint1/: directory containing TLS data for the endpoint1 in the corresponding context +// +// The context store itself has absolutely no knowledge about what a docker or a kubernetes endpoint should contain in term of metadata or TLS config. +// Client code is responsible for generating and parsing endpoint metadata and TLS files. +// The multi-endpoints approach of this package allows to combine many different endpoints in the same "context" (e.g., the Docker CLI +// is able for a single context to define both a docker endpoint and a Kubernetes endpoint for the same cluster, and also specify which +// orchestrator to use by default when deploying a compose stack on this cluster). +// +// Context IDs are actually SHA256 hashes of the context name, and are there only to avoid dealing with special characters in context names. +package store diff --git a/vendor/github.com/docker/cli/cli/context/store/io_utils.go b/vendor/github.com/docker/cli/cli/context/store/io_utils.go new file mode 100644 index 0000000..6f854c8 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/context/store/io_utils.go @@ -0,0 +1,29 @@ +package store + +import ( + "errors" + "io" +) + +// LimitedReader is a fork of io.LimitedReader to override Read. +type LimitedReader struct { + R io.Reader + N int64 // max bytes remaining +} + +// Read is a fork of io.LimitedReader.Read that returns an error when limit exceeded. +func (l *LimitedReader) Read(p []byte) (n int, err error) { + if l.N < 0 { + return 0, errors.New("read exceeds the defined limit") + } + if l.N == 0 { + return 0, io.EOF + } + // have to cap N + 1 otherwise we won't hit limit err + if int64(len(p)) > l.N+1 { + p = p[0 : l.N+1] + } + n, err = l.R.Read(p) + l.N -= int64(n) + return n, err +} diff --git a/vendor/github.com/docker/cli/cli/context/store/metadatastore.go b/vendor/github.com/docker/cli/cli/context/store/metadatastore.go new file mode 100644 index 0000000..0e9bc88 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/context/store/metadatastore.go @@ -0,0 +1,153 @@ +package store + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "reflect" + "sort" + + "github.com/fvbommel/sortorder" +) + +const ( + metadataDir = "meta" + metaFile = "meta.json" +) + +type metadataStore struct { + root string + config Config +} + +func (s *metadataStore) contextDir(id contextdir) string { + return filepath.Join(s.root, string(id)) +} + +func (s *metadataStore) createOrUpdate(meta Metadata) error { + contextDir := s.contextDir(contextdirOf(meta.Name)) + if err := os.MkdirAll(contextDir, 0755); err != nil { + return err + } + bytes, err := json.Marshal(&meta) + if err != nil { + return err + } + return ioutil.WriteFile(filepath.Join(contextDir, metaFile), bytes, 0644) +} + +func parseTypedOrMap(payload []byte, getter TypeGetter) (interface{}, error) { + if len(payload) == 0 || string(payload) == "null" { + return nil, nil + } + if getter == nil { + var res map[string]interface{} + if err := json.Unmarshal(payload, &res); err != nil { + return nil, err + } + return res, nil + } + typed := getter() + if err := json.Unmarshal(payload, typed); err != nil { + return nil, err + } + return reflect.ValueOf(typed).Elem().Interface(), nil +} + +func (s *metadataStore) get(id contextdir) (Metadata, error) { + contextDir := s.contextDir(id) + bytes, err := ioutil.ReadFile(filepath.Join(contextDir, metaFile)) + if err != nil { + return Metadata{}, convertContextDoesNotExist(err) + } + var untyped untypedContextMetadata + r := Metadata{ + Endpoints: make(map[string]interface{}), + } + if err := json.Unmarshal(bytes, &untyped); err != nil { + return Metadata{}, err + } + r.Name = untyped.Name + if r.Metadata, err = parseTypedOrMap(untyped.Metadata, s.config.contextType); err != nil { + return Metadata{}, err + } + for k, v := range untyped.Endpoints { + if r.Endpoints[k], err = parseTypedOrMap(v, s.config.endpointTypes[k]); err != nil { + return Metadata{}, err + } + } + return r, err +} + +func (s *metadataStore) remove(id contextdir) error { + contextDir := s.contextDir(id) + return os.RemoveAll(contextDir) +} + +func (s *metadataStore) list() ([]Metadata, error) { + ctxDirs, err := listRecursivelyMetadataDirs(s.root) + if err != nil { + if os.IsNotExist(err) { + return nil, nil + } + return nil, err + } + var res []Metadata + for _, dir := range ctxDirs { + c, err := s.get(contextdir(dir)) + if err != nil { + return nil, err + } + res = append(res, c) + } + sort.Slice(res, func(i, j int) bool { + return sortorder.NaturalLess(res[i].Name, res[j].Name) + }) + return res, nil +} + +func isContextDir(path string) bool { + s, err := os.Stat(filepath.Join(path, metaFile)) + if err != nil { + return false + } + return !s.IsDir() +} + +func listRecursivelyMetadataDirs(root string) ([]string, error) { + fis, err := ioutil.ReadDir(root) + if err != nil { + return nil, err + } + var result []string + for _, fi := range fis { + if fi.IsDir() { + if isContextDir(filepath.Join(root, fi.Name())) { + result = append(result, fi.Name()) + } + subs, err := listRecursivelyMetadataDirs(filepath.Join(root, fi.Name())) + if err != nil { + return nil, err + } + for _, s := range subs { + result = append(result, fmt.Sprintf("%s/%s", fi.Name(), s)) + } + } + } + return result, nil +} + +func convertContextDoesNotExist(err error) error { + if os.IsNotExist(err) { + return &contextDoesNotExistError{} + } + return err +} + +type untypedContextMetadata struct { + Metadata json.RawMessage `json:"metadata,omitempty"` + Endpoints map[string]json.RawMessage `json:"endpoints,omitempty"` + Name string `json:"name,omitempty"` +} diff --git a/vendor/github.com/docker/cli/cli/context/store/store.go b/vendor/github.com/docker/cli/cli/context/store/store.go new file mode 100644 index 0000000..71220e9 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/context/store/store.go @@ -0,0 +1,540 @@ +package store + +import ( + "archive/tar" + "archive/zip" + "bufio" + "bytes" + _ "crypto/sha256" // ensure ids can be computed + "encoding/json" + "fmt" + "io" + "io/ioutil" + "net/http" + "path" + "path/filepath" + "regexp" + "strings" + + "github.com/docker/docker/errdefs" + digest "github.com/opencontainers/go-digest" + "github.com/pkg/errors" +) + +const restrictedNamePattern = "^[a-zA-Z0-9][a-zA-Z0-9_.+-]+$" + +var restrictedNameRegEx = regexp.MustCompile(restrictedNamePattern) + +// Store provides a context store for easily remembering endpoints configuration +type Store interface { + Reader + Lister + Writer + StorageInfoProvider +} + +// Reader provides read-only (without list) access to context data +type Reader interface { + GetMetadata(name string) (Metadata, error) + ListTLSFiles(name string) (map[string]EndpointFiles, error) + GetTLSData(contextName, endpointName, fileName string) ([]byte, error) +} + +// Lister provides listing of contexts +type Lister interface { + List() ([]Metadata, error) +} + +// ReaderLister combines Reader and Lister interfaces +type ReaderLister interface { + Reader + Lister +} + +// StorageInfoProvider provides more information about storage details of contexts +type StorageInfoProvider interface { + GetStorageInfo(contextName string) StorageInfo +} + +// Writer provides write access to context data +type Writer interface { + CreateOrUpdate(meta Metadata) error + Remove(name string) error + ResetTLSMaterial(name string, data *ContextTLSData) error + ResetEndpointTLSMaterial(contextName string, endpointName string, data *EndpointTLSData) error +} + +// ReaderWriter combines Reader and Writer interfaces +type ReaderWriter interface { + Reader + Writer +} + +// Metadata contains metadata about a context and its endpoints +type Metadata struct { + Name string `json:",omitempty"` + Metadata interface{} `json:",omitempty"` + Endpoints map[string]interface{} `json:",omitempty"` +} + +// StorageInfo contains data about where a given context is stored +type StorageInfo struct { + MetadataPath string + TLSPath string +} + +// EndpointTLSData represents tls data for a given endpoint +type EndpointTLSData struct { + Files map[string][]byte +} + +// ContextTLSData represents tls data for a whole context +type ContextTLSData struct { + Endpoints map[string]EndpointTLSData +} + +// New creates a store from a given directory. +// If the directory does not exist or is empty, initialize it +func New(dir string, cfg Config) Store { + metaRoot := filepath.Join(dir, metadataDir) + tlsRoot := filepath.Join(dir, tlsDir) + + return &store{ + meta: &metadataStore{ + root: metaRoot, + config: cfg, + }, + tls: &tlsStore{ + root: tlsRoot, + }, + } +} + +type store struct { + meta *metadataStore + tls *tlsStore +} + +func (s *store) List() ([]Metadata, error) { + return s.meta.list() +} + +func (s *store) CreateOrUpdate(meta Metadata) error { + return s.meta.createOrUpdate(meta) +} + +func (s *store) Remove(name string) error { + id := contextdirOf(name) + if err := s.meta.remove(id); err != nil { + return patchErrContextName(err, name) + } + return patchErrContextName(s.tls.removeAllContextData(id), name) +} + +func (s *store) GetMetadata(name string) (Metadata, error) { + res, err := s.meta.get(contextdirOf(name)) + patchErrContextName(err, name) + return res, err +} + +func (s *store) ResetTLSMaterial(name string, data *ContextTLSData) error { + id := contextdirOf(name) + if err := s.tls.removeAllContextData(id); err != nil { + return patchErrContextName(err, name) + } + if data == nil { + return nil + } + for ep, files := range data.Endpoints { + for fileName, data := range files.Files { + if err := s.tls.createOrUpdate(id, ep, fileName, data); err != nil { + return patchErrContextName(err, name) + } + } + } + return nil +} + +func (s *store) ResetEndpointTLSMaterial(contextName string, endpointName string, data *EndpointTLSData) error { + id := contextdirOf(contextName) + if err := s.tls.removeAllEndpointData(id, endpointName); err != nil { + return patchErrContextName(err, contextName) + } + if data == nil { + return nil + } + for fileName, data := range data.Files { + if err := s.tls.createOrUpdate(id, endpointName, fileName, data); err != nil { + return patchErrContextName(err, contextName) + } + } + return nil +} + +func (s *store) ListTLSFiles(name string) (map[string]EndpointFiles, error) { + res, err := s.tls.listContextData(contextdirOf(name)) + return res, patchErrContextName(err, name) +} + +func (s *store) GetTLSData(contextName, endpointName, fileName string) ([]byte, error) { + res, err := s.tls.getData(contextdirOf(contextName), endpointName, fileName) + return res, patchErrContextName(err, contextName) +} + +func (s *store) GetStorageInfo(contextName string) StorageInfo { + dir := contextdirOf(contextName) + return StorageInfo{ + MetadataPath: s.meta.contextDir(dir), + TLSPath: s.tls.contextDir(dir), + } +} + +// ValidateContextName checks a context name is valid. +func ValidateContextName(name string) error { + if name == "" { + return errors.New("context name cannot be empty") + } + if name == "default" { + return errors.New(`"default" is a reserved context name`) + } + if !restrictedNameRegEx.MatchString(name) { + return fmt.Errorf("context name %q is invalid, names are validated against regexp %q", name, restrictedNamePattern) + } + return nil +} + +// Export exports an existing namespace into an opaque data stream +// This stream is actually a tarball containing context metadata and TLS materials, but it does +// not map 1:1 the layout of the context store (don't try to restore it manually without calling store.Import) +func Export(name string, s Reader) io.ReadCloser { + reader, writer := io.Pipe() + go func() { + tw := tar.NewWriter(writer) + defer tw.Close() + defer writer.Close() + meta, err := s.GetMetadata(name) + if err != nil { + writer.CloseWithError(err) + return + } + metaBytes, err := json.Marshal(&meta) + if err != nil { + writer.CloseWithError(err) + return + } + if err = tw.WriteHeader(&tar.Header{ + Name: metaFile, + Mode: 0644, + Size: int64(len(metaBytes)), + }); err != nil { + writer.CloseWithError(err) + return + } + if _, err = tw.Write(metaBytes); err != nil { + writer.CloseWithError(err) + return + } + tlsFiles, err := s.ListTLSFiles(name) + if err != nil { + writer.CloseWithError(err) + return + } + if err = tw.WriteHeader(&tar.Header{ + Name: "tls", + Mode: 0700, + Size: 0, + Typeflag: tar.TypeDir, + }); err != nil { + writer.CloseWithError(err) + return + } + for endpointName, endpointFiles := range tlsFiles { + if err = tw.WriteHeader(&tar.Header{ + Name: path.Join("tls", endpointName), + Mode: 0700, + Size: 0, + Typeflag: tar.TypeDir, + }); err != nil { + writer.CloseWithError(err) + return + } + for _, fileName := range endpointFiles { + data, err := s.GetTLSData(name, endpointName, fileName) + if err != nil { + writer.CloseWithError(err) + return + } + if err = tw.WriteHeader(&tar.Header{ + Name: path.Join("tls", endpointName, fileName), + Mode: 0600, + Size: int64(len(data)), + }); err != nil { + writer.CloseWithError(err) + return + } + if _, err = tw.Write(data); err != nil { + writer.CloseWithError(err) + return + } + } + } + }() + return reader +} + +const ( + maxAllowedFileSizeToImport int64 = 10 << 20 + zipType string = "application/zip" +) + +func getImportContentType(r *bufio.Reader) (string, error) { + head, err := r.Peek(512) + if err != nil && err != io.EOF { + return "", err + } + + return http.DetectContentType(head), nil +} + +// Import imports an exported context into a store +func Import(name string, s Writer, reader io.Reader) error { + // Buffered reader will not advance the buffer, needed to determine content type + r := bufio.NewReader(reader) + + importContentType, err := getImportContentType(r) + if err != nil { + return err + } + switch importContentType { + case zipType: + return importZip(name, s, r) + default: + // Assume it's a TAR (TAR does not have a "magic number") + return importTar(name, s, r) + } +} + +func isValidFilePath(p string) error { + if p != metaFile && !strings.HasPrefix(p, "tls/") { + return errors.New("unexpected context file") + } + if path.Clean(p) != p { + return errors.New("unexpected path format") + } + if strings.Contains(p, `\`) { + return errors.New(`unexpected '\' in path`) + } + return nil +} + +func importTar(name string, s Writer, reader io.Reader) error { + tr := tar.NewReader(&LimitedReader{R: reader, N: maxAllowedFileSizeToImport}) + tlsData := ContextTLSData{ + Endpoints: map[string]EndpointTLSData{}, + } + var importedMetaFile bool + for { + hdr, err := tr.Next() + if err == io.EOF { + break + } + if err != nil { + return err + } + if hdr.Typeflag != tar.TypeReg { + // skip this entry, only taking files into account + continue + } + if err := isValidFilePath(hdr.Name); err != nil { + return errors.Wrap(err, hdr.Name) + } + if hdr.Name == metaFile { + data, err := ioutil.ReadAll(tr) + if err != nil { + return err + } + meta, err := parseMetadata(data, name) + if err != nil { + return err + } + if err := s.CreateOrUpdate(meta); err != nil { + return err + } + importedMetaFile = true + } else if strings.HasPrefix(hdr.Name, "tls/") { + data, err := ioutil.ReadAll(tr) + if err != nil { + return err + } + if err := importEndpointTLS(&tlsData, hdr.Name, data); err != nil { + return err + } + } + } + if !importedMetaFile { + return errdefs.InvalidParameter(errors.New("invalid context: no metadata found")) + } + return s.ResetTLSMaterial(name, &tlsData) +} + +func importZip(name string, s Writer, reader io.Reader) error { + body, err := ioutil.ReadAll(&LimitedReader{R: reader, N: maxAllowedFileSizeToImport}) + if err != nil { + return err + } + zr, err := zip.NewReader(bytes.NewReader(body), int64(len(body))) + if err != nil { + return err + } + tlsData := ContextTLSData{ + Endpoints: map[string]EndpointTLSData{}, + } + + var importedMetaFile bool + for _, zf := range zr.File { + fi := zf.FileInfo() + if !fi.Mode().IsRegular() { + // skip this entry, only taking regular files into account + continue + } + if err := isValidFilePath(zf.Name); err != nil { + return errors.Wrap(err, zf.Name) + } + if zf.Name == metaFile { + f, err := zf.Open() + if err != nil { + return err + } + + data, err := ioutil.ReadAll(&LimitedReader{R: f, N: maxAllowedFileSizeToImport}) + defer f.Close() + if err != nil { + return err + } + meta, err := parseMetadata(data, name) + if err != nil { + return err + } + if err := s.CreateOrUpdate(meta); err != nil { + return err + } + importedMetaFile = true + } else if strings.HasPrefix(zf.Name, "tls/") { + f, err := zf.Open() + if err != nil { + return err + } + data, err := ioutil.ReadAll(f) + defer f.Close() + if err != nil { + return err + } + err = importEndpointTLS(&tlsData, zf.Name, data) + if err != nil { + return err + } + } + } + if !importedMetaFile { + return errdefs.InvalidParameter(errors.New("invalid context: no metadata found")) + } + return s.ResetTLSMaterial(name, &tlsData) +} + +func parseMetadata(data []byte, name string) (Metadata, error) { + var meta Metadata + if err := json.Unmarshal(data, &meta); err != nil { + return meta, err + } + if err := ValidateContextName(name); err != nil { + return Metadata{}, err + } + meta.Name = name + return meta, nil +} + +func importEndpointTLS(tlsData *ContextTLSData, path string, data []byte) error { + parts := strings.SplitN(strings.TrimPrefix(path, "tls/"), "/", 2) + if len(parts) != 2 { + // TLS endpoints require archived file directory with 2 layers + // i.e. tls/{endpointName}/{fileName} + return errors.New("archive format is invalid") + } + + epName := parts[0] + fileName := parts[1] + if _, ok := tlsData.Endpoints[epName]; !ok { + tlsData.Endpoints[epName] = EndpointTLSData{ + Files: map[string][]byte{}, + } + } + tlsData.Endpoints[epName].Files[fileName] = data + return nil +} + +type setContextName interface { + setContext(name string) +} + +type contextDoesNotExistError struct { + name string +} + +func (e *contextDoesNotExistError) Error() string { + return fmt.Sprintf("context %q does not exist", e.name) +} + +func (e *contextDoesNotExistError) setContext(name string) { + e.name = name +} + +// NotFound satisfies interface github.com/docker/docker/errdefs.ErrNotFound +func (e *contextDoesNotExistError) NotFound() {} + +type tlsDataDoesNotExist interface { + errdefs.ErrNotFound + IsTLSDataDoesNotExist() +} + +type tlsDataDoesNotExistError struct { + context, endpoint, file string +} + +func (e *tlsDataDoesNotExistError) Error() string { + return fmt.Sprintf("tls data for %s/%s/%s does not exist", e.context, e.endpoint, e.file) +} + +func (e *tlsDataDoesNotExistError) setContext(name string) { + e.context = name +} + +// NotFound satisfies interface github.com/docker/docker/errdefs.ErrNotFound +func (e *tlsDataDoesNotExistError) NotFound() {} + +// IsTLSDataDoesNotExist satisfies tlsDataDoesNotExist +func (e *tlsDataDoesNotExistError) IsTLSDataDoesNotExist() {} + +// IsErrContextDoesNotExist checks if the given error is a "context does not exist" condition +func IsErrContextDoesNotExist(err error) bool { + _, ok := err.(*contextDoesNotExistError) + return ok +} + +// IsErrTLSDataDoesNotExist checks if the given error is a "context does not exist" condition +func IsErrTLSDataDoesNotExist(err error) bool { + _, ok := err.(tlsDataDoesNotExist) + return ok +} + +type contextdir string + +func contextdirOf(name string) contextdir { + return contextdir(digest.FromString(name).Encoded()) +} + +func patchErrContextName(err error, name string) error { + if typed, ok := err.(setContextName); ok { + typed.setContext(name) + } + return err +} diff --git a/vendor/github.com/docker/cli/cli/context/store/storeconfig.go b/vendor/github.com/docker/cli/cli/context/store/storeconfig.go new file mode 100644 index 0000000..2a4bc57 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/context/store/storeconfig.go @@ -0,0 +1,53 @@ +package store + +// TypeGetter is a func used to determine the concrete type of a context or +// endpoint metadata by returning a pointer to an instance of the object +// eg: for a context of type DockerContext, the corresponding TypeGetter should return new(DockerContext) +type TypeGetter func() interface{} + +// NamedTypeGetter is a TypeGetter associated with a name +type NamedTypeGetter struct { + name string + typeGetter TypeGetter +} + +// EndpointTypeGetter returns a NamedTypeGetter with the spcecified name and getter +func EndpointTypeGetter(name string, getter TypeGetter) NamedTypeGetter { + return NamedTypeGetter{ + name: name, + typeGetter: getter, + } +} + +// Config is used to configure the metadata marshaler of the context store +type Config struct { + contextType TypeGetter + endpointTypes map[string]TypeGetter +} + +// SetEndpoint set an endpoint typing information +func (c Config) SetEndpoint(name string, getter TypeGetter) { + c.endpointTypes[name] = getter +} + +// ForeachEndpointType calls cb on every endpoint type registered with the Config +func (c Config) ForeachEndpointType(cb func(string, TypeGetter) error) error { + for n, ep := range c.endpointTypes { + if err := cb(n, ep); err != nil { + return err + } + } + return nil +} + +// NewConfig creates a config object +func NewConfig(contextType TypeGetter, endpoints ...NamedTypeGetter) Config { + res := Config{ + contextType: contextType, + endpointTypes: make(map[string]TypeGetter), + } + for _, e := range endpoints { + res.endpointTypes[e.name] = e.typeGetter + } + return res +} diff --git a/vendor/github.com/docker/cli/cli/context/store/tlsstore.go b/vendor/github.com/docker/cli/cli/context/store/tlsstore.go new file mode 100644 index 0000000..1188ce2 --- /dev/null +++ b/vendor/github.com/docker/cli/cli/context/store/tlsstore.go @@ -0,0 +1,99 @@ +package store + +import ( + "io/ioutil" + "os" + "path/filepath" +) + +const tlsDir = "tls" + +type tlsStore struct { + root string +} + +func (s *tlsStore) contextDir(id contextdir) string { + return filepath.Join(s.root, string(id)) +} + +func (s *tlsStore) endpointDir(contextID contextdir, name string) string { + return filepath.Join(s.root, string(contextID), name) +} + +func (s *tlsStore) filePath(contextID contextdir, endpointName, filename string) string { + return filepath.Join(s.root, string(contextID), endpointName, filename) +} + +func (s *tlsStore) createOrUpdate(contextID contextdir, endpointName, filename string, data []byte) error { + epdir := s.endpointDir(contextID, endpointName) + parentOfRoot := filepath.Dir(s.root) + if err := os.MkdirAll(parentOfRoot, 0755); err != nil { + return err + } + if err := os.MkdirAll(epdir, 0700); err != nil { + return err + } + return ioutil.WriteFile(s.filePath(contextID, endpointName, filename), data, 0600) +} + +func (s *tlsStore) getData(contextID contextdir, endpointName, filename string) ([]byte, error) { + data, err := ioutil.ReadFile(s.filePath(contextID, endpointName, filename)) + if err != nil { + return nil, convertTLSDataDoesNotExist(endpointName, filename, err) + } + return data, nil +} + +func (s *tlsStore) remove(contextID contextdir, endpointName, filename string) error { + err := os.Remove(s.filePath(contextID, endpointName, filename)) + if os.IsNotExist(err) { + return nil + } + return err +} + +func (s *tlsStore) removeAllEndpointData(contextID contextdir, endpointName string) error { + return os.RemoveAll(s.endpointDir(contextID, endpointName)) +} + +func (s *tlsStore) removeAllContextData(contextID contextdir) error { + return os.RemoveAll(s.contextDir(contextID)) +} + +func (s *tlsStore) listContextData(contextID contextdir) (map[string]EndpointFiles, error) { + epFSs, err := ioutil.ReadDir(s.contextDir(contextID)) + if err != nil { + if os.IsNotExist(err) { + return map[string]EndpointFiles{}, nil + } + return nil, err + } + r := make(map[string]EndpointFiles) + for _, epFS := range epFSs { + if epFS.IsDir() { + epDir := s.endpointDir(contextID, epFS.Name()) + fss, err := ioutil.ReadDir(epDir) + if err != nil { + return nil, err + } + var files EndpointFiles + for _, fs := range fss { + if !fs.IsDir() { + files = append(files, fs.Name()) + } + } + r[epFS.Name()] = files + } + } + return r, nil +} + +// EndpointFiles is a slice of strings representing file names +type EndpointFiles []string + +func convertTLSDataDoesNotExist(endpoint, file string, err error) error { + if os.IsNotExist(err) { + return &tlsDataDoesNotExistError{endpoint: endpoint, file: file} + } + return err +} diff --git a/vendor/github.com/docker/cli/cli/context/tlsdata.go b/vendor/github.com/docker/cli/cli/context/tlsdata.go new file mode 100644 index 0000000..124d98b --- /dev/null +++ b/vendor/github.com/docker/cli/cli/context/tlsdata.go @@ -0,0 +1,98 @@ +package context + +import ( + "io/ioutil" + + "github.com/docker/cli/cli/context/store" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" +) + +const ( + caKey = "ca.pem" + certKey = "cert.pem" + keyKey = "key.pem" +) + +// TLSData holds ca/cert/key raw data +type TLSData struct { + CA []byte + Key []byte + Cert []byte +} + +// ToStoreTLSData converts TLSData to the store representation +func (data *TLSData) ToStoreTLSData() *store.EndpointTLSData { + if data == nil { + return nil + } + result := store.EndpointTLSData{ + Files: make(map[string][]byte), + } + if data.CA != nil { + result.Files[caKey] = data.CA + } + if data.Cert != nil { + result.Files[certKey] = data.Cert + } + if data.Key != nil { + result.Files[keyKey] = data.Key + } + return &result +} + +// LoadTLSData loads TLS data from the store +func LoadTLSData(s store.Reader, contextName, endpointName string) (*TLSData, error) { + tlsFiles, err := s.ListTLSFiles(contextName) + if err != nil { + return nil, errors.Wrapf(err, "failed to retrieve context tls files for context %q", contextName) + } + if epTLSFiles, ok := tlsFiles[endpointName]; ok { + var tlsData TLSData + for _, f := range epTLSFiles { + data, err := s.GetTLSData(contextName, endpointName, f) + if err != nil { + return nil, errors.Wrapf(err, "failed to retrieve context tls data for file %q of context %q", f, contextName) + } + switch f { + case caKey: + tlsData.CA = data + case certKey: + tlsData.Cert = data + case keyKey: + tlsData.Key = data + default: + logrus.Warnf("unknown file %s in context %s tls bundle", f, contextName) + } + } + return &tlsData, nil + } + return nil, nil +} + +// TLSDataFromFiles reads files into a TLSData struct (or returns nil if all paths are empty) +func TLSDataFromFiles(caPath, certPath, keyPath string) (*TLSData, error) { + var ( + ca, cert, key []byte + err error + ) + if caPath != "" { + if ca, err = ioutil.ReadFile(caPath); err != nil { + return nil, err + } + } + if certPath != "" { + if cert, err = ioutil.ReadFile(certPath); err != nil { + return nil, err + } + } + if keyPath != "" { + if key, err = ioutil.ReadFile(keyPath); err != nil { + return nil, err + } + } + if ca == nil && cert == nil && key == nil { + return nil, nil + } + return &TLSData{CA: ca, Cert: cert, Key: key}, nil +} diff --git a/vendor/github.com/docker/docker-credential-helpers/LICENSE b/vendor/github.com/docker/docker-credential-helpers/LICENSE new file mode 100644 index 0000000..1ea555e --- /dev/null +++ b/vendor/github.com/docker/docker-credential-helpers/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2016 David Calavera + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/docker/docker-credential-helpers/client/client.go b/vendor/github.com/docker/docker-credential-helpers/client/client.go new file mode 100644 index 0000000..678153c --- /dev/null +++ b/vendor/github.com/docker/docker-credential-helpers/client/client.go @@ -0,0 +1,121 @@ +package client + +import ( + "bytes" + "encoding/json" + "fmt" + "strings" + + "github.com/docker/docker-credential-helpers/credentials" +) + +// isValidCredsMessage checks if 'msg' contains invalid credentials error message. +// It returns whether the logs are free of invalid credentials errors and the error if it isn't. +// error values can be errCredentialsMissingServerURL or errCredentialsMissingUsername. +func isValidCredsMessage(msg string) error { + if credentials.IsCredentialsMissingServerURLMessage(msg) { + return credentials.NewErrCredentialsMissingServerURL() + } + + if credentials.IsCredentialsMissingUsernameMessage(msg) { + return credentials.NewErrCredentialsMissingUsername() + } + + return nil +} + +// Store uses an external program to save credentials. +func Store(program ProgramFunc, creds *credentials.Credentials) error { + cmd := program(credentials.ActionStore) + + buffer := new(bytes.Buffer) + if err := json.NewEncoder(buffer).Encode(creds); err != nil { + return err + } + cmd.Input(buffer) + + out, err := cmd.Output() + if err != nil { + t := strings.TrimSpace(string(out)) + + if isValidErr := isValidCredsMessage(t); isValidErr != nil { + err = isValidErr + } + + return fmt.Errorf("error storing credentials - err: %v, out: `%s`", err, t) + } + + return nil +} + +// Get executes an external program to get the credentials from a native store. +func Get(program ProgramFunc, serverURL string) (*credentials.Credentials, error) { + cmd := program(credentials.ActionGet) + cmd.Input(strings.NewReader(serverURL)) + + out, err := cmd.Output() + if err != nil { + t := strings.TrimSpace(string(out)) + + if credentials.IsErrCredentialsNotFoundMessage(t) { + return nil, credentials.NewErrCredentialsNotFound() + } + + if isValidErr := isValidCredsMessage(t); isValidErr != nil { + err = isValidErr + } + + return nil, fmt.Errorf("error getting credentials - err: %v, out: `%s`", err, t) + } + + resp := &credentials.Credentials{ + ServerURL: serverURL, + } + + if err := json.NewDecoder(bytes.NewReader(out)).Decode(resp); err != nil { + return nil, err + } + + return resp, nil +} + +// Erase executes a program to remove the server credentials from the native store. +func Erase(program ProgramFunc, serverURL string) error { + cmd := program(credentials.ActionErase) + cmd.Input(strings.NewReader(serverURL)) + out, err := cmd.Output() + if err != nil { + t := strings.TrimSpace(string(out)) + + if isValidErr := isValidCredsMessage(t); isValidErr != nil { + err = isValidErr + } + + return fmt.Errorf("error erasing credentials - err: %v, out: `%s`", err, t) + } + + return nil +} + +// List executes a program to list server credentials in the native store. +func List(program ProgramFunc) (map[string]string, error) { + cmd := program(credentials.ActionList) + cmd.Input(strings.NewReader("unused")) + out, err := cmd.Output() + if err != nil { + t := strings.TrimSpace(string(out)) + + if isValidErr := isValidCredsMessage(t); isValidErr != nil { + err = isValidErr + } + + return nil, fmt.Errorf("error listing credentials - err: %v, out: `%s`", err, t) + } + + var resp map[string]string + if err = json.NewDecoder(bytes.NewReader(out)).Decode(&resp); err != nil { + return nil, err + } + + return resp, nil +} diff --git a/vendor/github.com/docker/docker-credential-helpers/client/command.go b/vendor/github.com/docker/docker-credential-helpers/client/command.go new file mode 100644 index 0000000..1936234 --- /dev/null +++ b/vendor/github.com/docker/docker-credential-helpers/client/command.go @@ -0,0 +1,54 @@ +package client + +import ( + "io" + "os" + "os/exec" +) + +// Program is an interface to execute external programs. +type Program interface { + Output() ([]byte, error) + Input(in io.Reader) +} + +// ProgramFunc is a type of function that initializes programs based on arguments. +type ProgramFunc func(args ...string) Program + +// NewShellProgramFunc creates programs that are executed in a Shell. +func NewShellProgramFunc(name string) ProgramFunc { + return NewShellProgramFuncWithEnv(name, nil) +} + +// NewShellProgramFuncWithEnv creates programs that are executed in a Shell with environment variables +func NewShellProgramFuncWithEnv(name string, env *map[string]string) ProgramFunc { + return func(args ...string) Program { + return &Shell{cmd: createProgramCmdRedirectErr(name, args, env)} + } +} + +func createProgramCmdRedirectErr(commandName string, args []string, env *map[string]string) *exec.Cmd { + programCmd := exec.Command(commandName, args...) + if env != nil { + for k, v := range *env { + programCmd.Env = append(programCmd.Environ(), k+"="+v) + } + } + programCmd.Stderr = os.Stderr + return programCmd +} + +// Shell invokes shell commands to talk with a remote credentials-helper. +type Shell struct { + cmd *exec.Cmd +} + +// Output returns responses from the remote credentials-helper. +func (s *Shell) Output() ([]byte, error) { + return s.cmd.Output() +} + +// Input sets the input to send to a remote credentials-helper. +func (s *Shell) Input(in io.Reader) { + s.cmd.Stdin = in +} diff --git a/vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go b/vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go new file mode 100644 index 0000000..eac5518 --- /dev/null +++ b/vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go @@ -0,0 +1,209 @@ +package credentials + +import ( + "bufio" + "bytes" + "encoding/json" + "fmt" + "io" + "os" + "strings" +) + +// Action defines the name of an action (sub-command) supported by a +// credential-helper binary. It is an alias for "string", and mostly +// for convenience. +type Action = string + +// List of actions (sub-commands) supported by credential-helper binaries. +const ( + ActionStore Action = "store" + ActionGet Action = "get" + ActionErase Action = "erase" + ActionList Action = "list" + ActionVersion Action = "version" +) + +// Credentials holds the information shared between docker and the credentials store. +type Credentials struct { + ServerURL string + Username string + Secret string +} + +// isValid checks the integrity of Credentials object such that no credentials lack +// a server URL or a username. +// It returns whether the credentials are valid and the error if it isn't. +// error values can be errCredentialsMissingServerURL or errCredentialsMissingUsername +func (c *Credentials) isValid() (bool, error) { + if len(c.ServerURL) == 0 { + return false, NewErrCredentialsMissingServerURL() + } + + if len(c.Username) == 0 { + return false, NewErrCredentialsMissingUsername() + } + + return true, nil +} + +// CredsLabel holds the way Docker credentials should be labeled as such in credentials stores that allow labelling. +// That label allows to filter out non-Docker credentials too at lookup/search in macOS keychain, +// Windows credentials manager and Linux libsecret. Default value is "Docker Credentials" +var CredsLabel = "Docker Credentials" + +// SetCredsLabel is a simple setter for CredsLabel +func SetCredsLabel(label string) { + CredsLabel = label +} + +// Serve initializes the credentials-helper and parses the action argument. +// This function is designed to be called from a command line interface. +// It uses os.Args[1] as the key for the action. +// It uses os.Stdin as input and os.Stdout as output. +// This function terminates the program with os.Exit(1) if there is an error. +func Serve(helper Helper) { + if len(os.Args) != 2 { + _, _ = fmt.Fprintln(os.Stdout, usage()) + os.Exit(1) + } + + switch os.Args[1] { + case "--version", "-v": + _ = PrintVersion(os.Stdout) + os.Exit(0) + case "--help", "-h": + _, _ = fmt.Fprintln(os.Stdout, usage()) + os.Exit(0) + } + + if err := HandleCommand(helper, os.Args[1], os.Stdin, os.Stdout); err != nil { + _, _ = fmt.Fprintln(os.Stdout, err) + os.Exit(1) + } +} + +func usage() string { + return fmt.Sprintf("Usage: %s ", Name) +} + +// HandleCommand runs a helper to execute a credential action. +func HandleCommand(helper Helper, action Action, in io.Reader, out io.Writer) error { + switch action { + case ActionStore: + return Store(helper, in) + case ActionGet: + return Get(helper, in, out) + case ActionErase: + return Erase(helper, in) + case ActionList: + return List(helper, out) + case ActionVersion: + return PrintVersion(out) + default: + return fmt.Errorf("%s: unknown action: %s", Name, action) + } +} + +// Store uses a helper and an input reader to save credentials. +// The reader must contain the JSON serialization of a Credentials struct. +func Store(helper Helper, reader io.Reader) error { + scanner := bufio.NewScanner(reader) + + buffer := new(bytes.Buffer) + for scanner.Scan() { + buffer.Write(scanner.Bytes()) + } + + if err := scanner.Err(); err != nil && err != io.EOF { + return err + } + + var creds Credentials + if err := json.NewDecoder(buffer).Decode(&creds); err != nil { + return err + } + + if ok, err := creds.isValid(); !ok { + return err + } + + return helper.Add(&creds) +} + +// Get retrieves the credentials for a given server url. +// The reader must contain the server URL to search. +// The writer is used to write the JSON serialization of the credentials. +func Get(helper Helper, reader io.Reader, writer io.Writer) error { + scanner := bufio.NewScanner(reader) + + buffer := new(bytes.Buffer) + for scanner.Scan() { + buffer.Write(scanner.Bytes()) + } + + if err := scanner.Err(); err != nil && err != io.EOF { + return err + } + + serverURL := strings.TrimSpace(buffer.String()) + if len(serverURL) == 0 { + return NewErrCredentialsMissingServerURL() + } + + username, secret, err := helper.Get(serverURL) + if err != nil { + return err + } + + buffer.Reset() + err = json.NewEncoder(buffer).Encode(Credentials{ + ServerURL: serverURL, + Username: username, + Secret: secret, + }) + if err != nil { + return err + } + + _, _ = fmt.Fprint(writer, buffer.String()) + return nil +} + +// Erase removes credentials from the store. +// The reader must contain the server URL to remove. +func Erase(helper Helper, reader io.Reader) error { + scanner := bufio.NewScanner(reader) + + buffer := new(bytes.Buffer) + for scanner.Scan() { + buffer.Write(scanner.Bytes()) + } + + if err := scanner.Err(); err != nil && err != io.EOF { + return err + } + + serverURL := strings.TrimSpace(buffer.String()) + if len(serverURL) == 0 { + return NewErrCredentialsMissingServerURL() + } + + return helper.Delete(serverURL) +} + +// List returns all the serverURLs of keys in +// the OS store as a list of strings +func List(helper Helper, writer io.Writer) error { + accts, err := helper.List() + if err != nil { + return err + } + return json.NewEncoder(writer).Encode(accts) +} + +// PrintVersion outputs the current version. +func PrintVersion(writer io.Writer) error { + _, _ = fmt.Fprintf(writer, "%s (%s) %s\n", Name, Package, Version) + return nil +} diff --git a/vendor/github.com/docker/docker-credential-helpers/credentials/error.go b/vendor/github.com/docker/docker-credential-helpers/credentials/error.go new file mode 100644 index 0000000..8fa4d5d --- /dev/null +++ b/vendor/github.com/docker/docker-credential-helpers/credentials/error.go @@ -0,0 +1,121 @@ +package credentials + +import "errors" + +const ( + // ErrCredentialsNotFound standardizes the not found error, so every helper returns + // the same message and docker can handle it properly. + errCredentialsNotFoundMessage = "credentials not found in native keychain" + + // ErrCredentialsMissingServerURL and ErrCredentialsMissingUsername standardize + // invalid credentials or credentials management operations + errCredentialsMissingServerURLMessage = "no credentials server URL" + errCredentialsMissingUsernameMessage = "no credentials username" +) + +// errCredentialsNotFound represents an error +// raised when credentials are not in the store. +type errCredentialsNotFound struct{} + +// Error returns the standard error message +// for when the credentials are not in the store. +func (errCredentialsNotFound) Error() string { + return errCredentialsNotFoundMessage +} + +// NotFound implements the [ErrNotFound][errdefs.ErrNotFound] interface. +// +// [errdefs.ErrNotFound]: https://pkg.go.dev/github.com/docker/docker@v24.0.1+incompatible/errdefs#ErrNotFound +func (errCredentialsNotFound) NotFound() {} + +// NewErrCredentialsNotFound creates a new error +// for when the credentials are not in the store. +func NewErrCredentialsNotFound() error { + return errCredentialsNotFound{} +} + +// IsErrCredentialsNotFound returns true if the error +// was caused by not having a set of credentials in a store. +func IsErrCredentialsNotFound(err error) bool { + var target errCredentialsNotFound + return errors.As(err, &target) +} + +// IsErrCredentialsNotFoundMessage returns true if the error +// was caused by not having a set of credentials in a store. +// +// This function helps to check messages returned by an +// external program via its standard output. +func IsErrCredentialsNotFoundMessage(err string) bool { + return err == errCredentialsNotFoundMessage +} + +// errCredentialsMissingServerURL represents an error raised +// when the credentials object has no server URL or when no +// server URL is provided to a credentials operation requiring +// one. +type errCredentialsMissingServerURL struct{} + +func (errCredentialsMissingServerURL) Error() string { + return errCredentialsMissingServerURLMessage +} + +// InvalidParameter implements the [ErrInvalidParameter][errdefs.ErrInvalidParameter] +// interface. +// +// [errdefs.ErrInvalidParameter]: https://pkg.go.dev/github.com/docker/docker@v24.0.1+incompatible/errdefs#ErrInvalidParameter +func (errCredentialsMissingServerURL) InvalidParameter() {} + +// errCredentialsMissingUsername represents an error raised +// when the credentials object has no username or when no +// username is provided to a credentials operation requiring +// one. +type errCredentialsMissingUsername struct{} + +func (errCredentialsMissingUsername) Error() string { + return errCredentialsMissingUsernameMessage +} + +// InvalidParameter implements the [ErrInvalidParameter][errdefs.ErrInvalidParameter] +// interface. +// +// [errdefs.ErrInvalidParameter]: https://pkg.go.dev/github.com/docker/docker@v24.0.1+incompatible/errdefs#ErrInvalidParameter +func (errCredentialsMissingUsername) InvalidParameter() {} + +// NewErrCredentialsMissingServerURL creates a new error for +// errCredentialsMissingServerURL. +func NewErrCredentialsMissingServerURL() error { + return errCredentialsMissingServerURL{} +} + +// NewErrCredentialsMissingUsername creates a new error for +// errCredentialsMissingUsername. +func NewErrCredentialsMissingUsername() error { + return errCredentialsMissingUsername{} +} + +// IsCredentialsMissingServerURL returns true if the error +// was an errCredentialsMissingServerURL. +func IsCredentialsMissingServerURL(err error) bool { + var target errCredentialsMissingServerURL + return errors.As(err, &target) +} + +// IsCredentialsMissingServerURLMessage checks for an +// errCredentialsMissingServerURL in the error message. +func IsCredentialsMissingServerURLMessage(err string) bool { + return err == errCredentialsMissingServerURLMessage +} + +// IsCredentialsMissingUsername returns true if the error +// was an errCredentialsMissingUsername. +func IsCredentialsMissingUsername(err error) bool { + var target errCredentialsMissingUsername + return errors.As(err, &target) +} + +// IsCredentialsMissingUsernameMessage checks for an +// errCredentialsMissingUsername in the error message. +func IsCredentialsMissingUsernameMessage(err string) bool { + return err == errCredentialsMissingUsernameMessage +} diff --git a/vendor/github.com/docker/docker-credential-helpers/credentials/helper.go b/vendor/github.com/docker/docker-credential-helpers/credentials/helper.go new file mode 100644 index 0000000..135acd2 --- /dev/null +++ b/vendor/github.com/docker/docker-credential-helpers/credentials/helper.go @@ -0,0 +1,14 @@ +package credentials + +// Helper is the interface a credentials store helper must implement. +type Helper interface { + // Add appends credentials to the store. + Add(*Credentials) error + // Delete removes credentials from the store. + Delete(serverURL string) error + // Get retrieves credentials from the store. + // It returns username and secret as strings. + Get(serverURL string) (string, string, error) + // List returns the stored serverURLs and their associated usernames. + List() (map[string]string, error) +} diff --git a/vendor/github.com/docker/docker-credential-helpers/credentials/version.go b/vendor/github.com/docker/docker-credential-helpers/credentials/version.go new file mode 100644 index 0000000..84377c2 --- /dev/null +++ b/vendor/github.com/docker/docker-credential-helpers/credentials/version.go @@ -0,0 +1,16 @@ +package credentials + +var ( + // Name is filled at linking time + Name = "" + + // Package is filled at linking time + Package = "github.com/docker/docker-credential-helpers" + + // Version holds the complete version number. Filled in at linking time. + Version = "v0.0.0+unknown" + + // Revision is filled with the VCS (e.g. git) revision being used to build + // the program at linking time. + Revision = "" +) diff --git a/vendor/github.com/docker/docker/pkg/homedir/homedir_linux.go b/vendor/github.com/docker/docker/pkg/homedir/homedir_linux.go new file mode 100644 index 0000000..5e6310f --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/homedir/homedir_linux.go @@ -0,0 +1,93 @@ +package homedir // import "github.com/docker/docker/pkg/homedir" + +import ( + "errors" + "os" + "path/filepath" + "strings" +) + +// GetRuntimeDir returns XDG_RUNTIME_DIR. +// XDG_RUNTIME_DIR is typically configured via pam_systemd. +// GetRuntimeDir returns non-nil error if XDG_RUNTIME_DIR is not set. +// +// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html +func GetRuntimeDir() (string, error) { + if xdgRuntimeDir := os.Getenv("XDG_RUNTIME_DIR"); xdgRuntimeDir != "" { + return xdgRuntimeDir, nil + } + return "", errors.New("could not get XDG_RUNTIME_DIR") +} + +// StickRuntimeDirContents sets the sticky bit on files that are under +// XDG_RUNTIME_DIR, so that the files won't be periodically removed by the system. +// +// StickyRuntimeDir returns slice of sticked files. +// StickyRuntimeDir returns nil error if XDG_RUNTIME_DIR is not set. +// +// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html +func StickRuntimeDirContents(files []string) ([]string, error) { + runtimeDir, err := GetRuntimeDir() + if err != nil { + // ignore error if runtimeDir is empty + return nil, nil + } + runtimeDir, err = filepath.Abs(runtimeDir) + if err != nil { + return nil, err + } + var sticked []string + for _, f := range files { + f, err = filepath.Abs(f) + if err != nil { + return sticked, err + } + if strings.HasPrefix(f, runtimeDir+"/") { + if err = stick(f); err != nil { + return sticked, err + } + sticked = append(sticked, f) + } + } + return sticked, nil +} + +func stick(f string) error { + st, err := os.Stat(f) + if err != nil { + return err + } + m := st.Mode() + m |= os.ModeSticky + return os.Chmod(f, m) +} + +// GetDataHome returns XDG_DATA_HOME. +// GetDataHome returns $HOME/.local/share and nil error if XDG_DATA_HOME is not set. +// +// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html +func GetDataHome() (string, error) { + if xdgDataHome := os.Getenv("XDG_DATA_HOME"); xdgDataHome != "" { + return xdgDataHome, nil + } + home := os.Getenv("HOME") + if home == "" { + return "", errors.New("could not get either XDG_DATA_HOME or HOME") + } + return filepath.Join(home, ".local", "share"), nil +} + +// GetConfigHome returns XDG_CONFIG_HOME. +// GetConfigHome returns $HOME/.config and nil error if XDG_CONFIG_HOME is not set. +// +// See also https://standards.freedesktop.org/basedir-spec/latest/ar01s03.html +func GetConfigHome() (string, error) { + if xdgConfigHome := os.Getenv("XDG_CONFIG_HOME"); xdgConfigHome != "" { + return xdgConfigHome, nil + } + home := os.Getenv("HOME") + if home == "" { + return "", errors.New("could not get either XDG_CONFIG_HOME or HOME") + } + return filepath.Join(home, ".config"), nil +} diff --git a/vendor/github.com/docker/docker/pkg/homedir/homedir_others.go b/vendor/github.com/docker/docker/pkg/homedir/homedir_others.go new file mode 100644 index 0000000..fc48e67 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/homedir/homedir_others.go @@ -0,0 +1,28 @@ +//go:build !linux +// +build !linux + +package homedir // import "github.com/docker/docker/pkg/homedir" + +import ( + "errors" +) + +// GetRuntimeDir is unsupported on non-linux system. +func GetRuntimeDir() (string, error) { + return "", errors.New("homedir.GetRuntimeDir() is not supported on this system") +} + +// StickRuntimeDirContents is unsupported on non-linux system. +func StickRuntimeDirContents(files []string) ([]string, error) { + return nil, errors.New("homedir.StickRuntimeDirContents() is not supported on this system") +} + +// GetDataHome is unsupported on non-linux system. +func GetDataHome() (string, error) { + return "", errors.New("homedir.GetDataHome() is not supported on this system") +} + +// GetConfigHome is unsupported on non-linux system. +func GetConfigHome() (string, error) { + return "", errors.New("homedir.GetConfigHome() is not supported on this system") +} diff --git a/vendor/github.com/docker/docker/pkg/homedir/homedir_unix.go b/vendor/github.com/docker/docker/pkg/homedir/homedir_unix.go new file mode 100644 index 0000000..d1732de --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/homedir/homedir_unix.go @@ -0,0 +1,39 @@ +//go:build !windows +// +build !windows + +package homedir // import "github.com/docker/docker/pkg/homedir" + +import ( + "os" + "os/user" +) + +// Key returns the env var name for the user's home dir based on +// the platform being run on +func Key() string { + return "HOME" +} + +// Get returns the home directory of the current user with the help of +// environment variables depending on the target operating system. +// Returned path should be used with "path/filepath" to form new paths. +// +// If linking statically with cgo enabled against glibc, ensure the +// osusergo build tag is used. +// +// If needing to do nss lookups, do not disable cgo or set osusergo. +func Get() string { + home := os.Getenv(Key()) + if home == "" { + if u, err := user.Current(); err == nil { + return u.HomeDir + } + } + return home +} + +// GetShortcutString returns the string that is shortcut to user's home directory +// in the native shell of the platform running on. +func GetShortcutString() string { + return "~" +} diff --git a/vendor/github.com/docker/docker/pkg/homedir/homedir_windows.go b/vendor/github.com/docker/docker/pkg/homedir/homedir_windows.go new file mode 100644 index 0000000..2f81813 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/homedir/homedir_windows.go @@ -0,0 +1,24 @@ +package homedir // import "github.com/docker/docker/pkg/homedir" + +import ( + "os" +) + +// Key returns the env var name for the user's home dir based on +// the platform being run on +func Key() string { + return "USERPROFILE" +} + +// Get returns the home directory of the current user with the help of +// environment variables depending on the target operating system. +// Returned path should be used with "path/filepath" to form new paths. +func Get() string { + return os.Getenv(Key()) +} + +// GetShortcutString returns the string that is shortcut to user's home directory +// in the native shell of the platform running on. +func GetShortcutString() string { + return "%USERPROFILE%" // be careful while using in format functions +} diff --git a/vendor/github.com/fvbommel/sortorder/.gitignore b/vendor/github.com/fvbommel/sortorder/.gitignore new file mode 100644 index 0000000..c021733 --- /dev/null +++ b/vendor/github.com/fvbommel/sortorder/.gitignore @@ -0,0 +1,19 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so +# Folders +_obj +_test +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* +_testmain.go +*.exe +*.test +*.prof diff --git a/vendor/github.com/fvbommel/sortorder/LICENSE b/vendor/github.com/fvbommel/sortorder/LICENSE new file mode 100644 index 0000000..5c695fb --- /dev/null +++ b/vendor/github.com/fvbommel/sortorder/LICENSE @@ -0,0 +1,17 @@ +The MIT License (MIT) +Copyright (c) 2015 Frits van Bommel +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/fvbommel/sortorder/README.md b/vendor/github.com/fvbommel/sortorder/README.md new file mode 100644 index 0000000..06779c8 --- /dev/null +++ b/vendor/github.com/fvbommel/sortorder/README.md @@ -0,0 +1,9 @@ +# sortorder [![PkgGoDev](https://pkg.go.dev/badge/github.com/fvbommel/sortorder)](https://pkg.go.dev/github.com/fvbommel/sortorder) + + import "github.com/fvbommel/sortorder" + +Sort orders and comparison functions. + +Case-insensitive sort orders are in the `casefolded` sub-package +because it pulls in the Unicode tables in the standard library, +which can add significantly to the size of binaries. diff --git a/vendor/github.com/fvbommel/sortorder/doc.go b/vendor/github.com/fvbommel/sortorder/doc.go new file mode 100644 index 0000000..a7dd958 --- /dev/null +++ b/vendor/github.com/fvbommel/sortorder/doc.go @@ -0,0 +1,5 @@ +// Package sortorder implements sort orders and comparison functions. +// +// Currently, it only implements so-called "natural order", where integers +// embedded in strings are compared by value. +package sortorder // import "github.com/fvbommel/sortorder" diff --git a/vendor/github.com/fvbommel/sortorder/natsort.go b/vendor/github.com/fvbommel/sortorder/natsort.go new file mode 100644 index 0000000..e4f1511 --- /dev/null +++ b/vendor/github.com/fvbommel/sortorder/natsort.go @@ -0,0 +1,76 @@ +package sortorder + +// Natural implements sort.Interface to sort strings in natural order. This +// means that e.g. "abc2" < "abc12". +// +// Non-digit sequences and numbers are compared separately. The former are +// compared bytewise, while digits are compared numerically (except that +// the number of leading zeros is used as a tie-breaker, so e.g. "2" < "02") +// +// Limitation: only ASCII digits (0-9) are considered. +type Natural []string + +func (n Natural) Len() int { return len(n) } +func (n Natural) Swap(i, j int) { n[i], n[j] = n[j], n[i] } +func (n Natural) Less(i, j int) bool { return NaturalLess(n[i], n[j]) } + +func isDigit(b byte) bool { return '0' <= b && b <= '9' } + +// NaturalLess compares two strings using natural ordering. This means that e.g. +// "abc2" < "abc12". +// +// Non-digit sequences and numbers are compared separately. The former are +// compared bytewise, while digits are compared numerically (except that +// the number of leading zeros is used as a tie-breaker, so e.g. "2" < "02") +// +// Limitation: only ASCII digits (0-9) are considered. +func NaturalLess(str1, str2 string) bool { + idx1, idx2 := 0, 0 + for idx1 < len(str1) && idx2 < len(str2) { + c1, c2 := str1[idx1], str2[idx2] + dig1, dig2 := isDigit(c1), isDigit(c2) + switch { + case dig1 != dig2: // Digits before other characters. + return dig1 // True if LHS is a digit, false if the RHS is one. + case !dig1: // && !dig2, because dig1 == dig2 + // UTF-8 compares bytewise-lexicographically, no need to decode + // codepoints. + if c1 != c2 { + return c1 < c2 + } + idx1++ + idx2++ + default: // Digits + // Eat zeros. + for ; idx1 < len(str1) && str1[idx1] == '0'; idx1++ { + } + for ; idx2 < len(str2) && str2[idx2] == '0'; idx2++ { + } + // Eat all digits. + nonZero1, nonZero2 := idx1, idx2 + for ; idx1 < len(str1) && isDigit(str1[idx1]); idx1++ { + } + for ; idx2 < len(str2) && isDigit(str2[idx2]); idx2++ { + } + // If lengths of numbers with non-zero prefix differ, the shorter + // one is less. + if len1, len2 := idx1-nonZero1, idx2-nonZero2; len1 != len2 { + return len1 < len2 + } + // If they're equally long, string comparison is correct. + if nr1, nr2 := str1[nonZero1:idx1], str2[nonZero2:idx2]; nr1 != nr2 { + return nr1 < nr2 + } + // Otherwise, the one with less zeros is less. + // Because everything up to the number is equal, comparing the index + // after the zeros is sufficient. + if nonZero1 != nonZero2 { + return nonZero1 < nonZero2 + } + } + // They're identical so far, so continue comparing. + } + // So far they are identical. At least one is ended. If the other continues, + // it sorts last. + return len(str1) < len(str2) +} diff --git a/vendor/golang.org/x/sys/execabs/execabs.go b/vendor/golang.org/x/sys/execabs/execabs.go new file mode 100644 index 0000000..3bf40fd --- /dev/null +++ b/vendor/golang.org/x/sys/execabs/execabs.go @@ -0,0 +1,102 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package execabs is a drop-in replacement for os/exec +// that requires PATH lookups to find absolute paths. +// That is, execabs.Command("cmd") runs the same PATH lookup +// as exec.Command("cmd"), but if the result is a path +// which is relative, the Run and Start methods will report +// an error instead of running the executable. +// +// See https://blog.golang.org/path-security for more information +// about when it may be necessary or appropriate to use this package. +package execabs + +import ( + "context" + "fmt" + "os/exec" + "path/filepath" + "reflect" + "unsafe" +) + +// ErrNotFound is the error resulting if a path search failed to find an executable file. +// It is an alias for exec.ErrNotFound. +var ErrNotFound = exec.ErrNotFound + +// Cmd represents an external command being prepared or run. +// It is an alias for exec.Cmd. +type Cmd = exec.Cmd + +// Error is returned by LookPath when it fails to classify a file as an executable. +// It is an alias for exec.Error. +type Error = exec.Error + +// An ExitError reports an unsuccessful exit by a command. +// It is an alias for exec.ExitError. +type ExitError = exec.ExitError + +func relError(file, path string) error { + return fmt.Errorf("%s resolves to executable in current directory (.%c%s)", file, filepath.Separator, path) +} + +// LookPath searches for an executable named file in the directories +// named by the PATH environment variable. If file contains a slash, +// it is tried directly and the PATH is not consulted. The result will be +// an absolute path. +// +// LookPath differs from exec.LookPath in its handling of PATH lookups, +// which are used for file names without slashes. If exec.LookPath's +// PATH lookup would have returned an executable from the current directory, +// LookPath instead returns an error. +func LookPath(file string) (string, error) { + path, err := exec.LookPath(file) + if err != nil && !isGo119ErrDot(err) { + return "", err + } + if filepath.Base(file) == file && !filepath.IsAbs(path) { + return "", relError(file, path) + } + return path, nil +} + +func fixCmd(name string, cmd *exec.Cmd) { + if filepath.Base(name) == name && !filepath.IsAbs(cmd.Path) && !isGo119ErrFieldSet(cmd) { + // exec.Command was called with a bare binary name and + // exec.LookPath returned a path which is not absolute. + // Set cmd.lookPathErr and clear cmd.Path so that it + // cannot be run. + lookPathErr := (*error)(unsafe.Pointer(reflect.ValueOf(cmd).Elem().FieldByName("lookPathErr").Addr().Pointer())) + if *lookPathErr == nil { + *lookPathErr = relError(name, cmd.Path) + } + cmd.Path = "" + } +} + +// CommandContext is like Command but includes a context. +// +// The provided context is used to kill the process (by calling os.Process.Kill) +// if the context becomes done before the command completes on its own. +func CommandContext(ctx context.Context, name string, arg ...string) *exec.Cmd { + cmd := exec.CommandContext(ctx, name, arg...) + fixCmd(name, cmd) + return cmd + +} + +// Command returns the Cmd struct to execute the named program with the given arguments. +// See exec.Command for most details. +// +// Command differs from exec.Command in its handling of PATH lookups, +// which are used when the program name contains no slashes. +// If exec.Command would have returned an exec.Cmd configured to run an +// executable from the current directory, Command instead +// returns an exec.Cmd that will return an error from Start or Run. +func Command(name string, arg ...string) *exec.Cmd { + cmd := exec.Command(name, arg...) + fixCmd(name, cmd) + return cmd +} diff --git a/vendor/golang.org/x/sys/execabs/execabs_go118.go b/vendor/golang.org/x/sys/execabs/execabs_go118.go new file mode 100644 index 0000000..2000064 --- /dev/null +++ b/vendor/golang.org/x/sys/execabs/execabs_go118.go @@ -0,0 +1,18 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.19 +// +build !go1.19 + +package execabs + +import "os/exec" + +func isGo119ErrDot(err error) bool { + return false +} + +func isGo119ErrFieldSet(cmd *exec.Cmd) bool { + return false +} diff --git a/vendor/golang.org/x/sys/execabs/execabs_go119.go b/vendor/golang.org/x/sys/execabs/execabs_go119.go new file mode 100644 index 0000000..f364b34 --- /dev/null +++ b/vendor/golang.org/x/sys/execabs/execabs_go119.go @@ -0,0 +1,21 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.19 +// +build go1.19 + +package execabs + +import ( + "errors" + "os/exec" +) + +func isGo119ErrDot(err error) bool { + return errors.Is(err, exec.ErrDot) +} + +func isGo119ErrFieldSet(cmd *exec.Cmd) bool { + return cmd.Err != nil +} diff --git a/vendor/golang.org/x/sys/unix/ioctl_signed.go b/vendor/golang.org/x/sys/unix/ioctl_signed.go new file mode 100644 index 0000000..7def958 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ioctl_signed.go @@ -0,0 +1,70 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build aix || solaris +// +build aix solaris + +package unix + +import ( + "unsafe" +) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req int, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +// IoctlSetPointerInt performs an ioctl operation which sets an +// integer value on fd, using the specified request number. The ioctl +// argument is called with a pointer to the integer value, rather than +// passing the integer value directly. +func IoctlSetPointerInt(fd int, req int, value int) error { + v := int32(value) + return ioctlPtr(fd, req, unsafe.Pointer(&v)) +} + +// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. +// +// To change fd's window size, the req argument should be TIOCSWINSZ. +func IoctlSetWinsize(fd int, req int, value *Winsize) error { + // TODO: if we get the chance, remove the req parameter and + // hardcode TIOCSWINSZ. + return ioctlPtr(fd, req, unsafe.Pointer(value)) +} + +// IoctlSetTermios performs an ioctl on fd with a *Termios. +// +// The req value will usually be TCSETA or TIOCSETA. +func IoctlSetTermios(fd int, req int, value *Termios) error { + // TODO: if we get the chance, remove the req parameter. + return ioctlPtr(fd, req, unsafe.Pointer(value)) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +// +// A few ioctl requests use the return value as an output parameter; +// for those, IoctlRetInt should be used instead of this function. +func IoctlGetInt(fd int, req int) (int, error) { + var value int + err := ioctlPtr(fd, req, unsafe.Pointer(&value)) + return value, err +} + +func IoctlGetWinsize(fd int, req int) (*Winsize, error) { + var value Winsize + err := ioctlPtr(fd, req, unsafe.Pointer(&value)) + return &value, err +} + +func IoctlGetTermios(fd int, req int) (*Termios, error) { + var value Termios + err := ioctlPtr(fd, req, unsafe.Pointer(&value)) + return &value, err +} diff --git a/vendor/golang.org/x/sys/unix/ioctl.go b/vendor/golang.org/x/sys/unix/ioctl_unsigned.go similarity index 92% rename from vendor/golang.org/x/sys/unix/ioctl.go rename to vendor/golang.org/x/sys/unix/ioctl_unsigned.go index 7ce8dd4..649913d 100644 --- a/vendor/golang.org/x/sys/unix/ioctl.go +++ b/vendor/golang.org/x/sys/unix/ioctl_unsigned.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build aix || darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd || solaris -// +build aix darwin dragonfly freebsd hurd linux netbsd openbsd solaris +//go:build darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd +// +build darwin dragonfly freebsd hurd linux netbsd openbsd package unix diff --git a/vendor/golang.org/x/sys/unix/ioctl_zos.go b/vendor/golang.org/x/sys/unix/ioctl_zos.go index 6532f09..cdc21bf 100644 --- a/vendor/golang.org/x/sys/unix/ioctl_zos.go +++ b/vendor/golang.org/x/sys/unix/ioctl_zos.go @@ -17,14 +17,14 @@ import ( // IoctlSetInt performs an ioctl operation which sets an integer value // on fd, using the specified request number. -func IoctlSetInt(fd int, req uint, value int) error { +func IoctlSetInt(fd int, req int, value int) error { return ioctl(fd, req, uintptr(value)) } // IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. // // To change fd's window size, the req argument should be TIOCSWINSZ. -func IoctlSetWinsize(fd int, req uint, value *Winsize) error { +func IoctlSetWinsize(fd int, req int, value *Winsize) error { // TODO: if we get the chance, remove the req parameter and // hardcode TIOCSWINSZ. return ioctlPtr(fd, req, unsafe.Pointer(value)) @@ -33,7 +33,7 @@ func IoctlSetWinsize(fd int, req uint, value *Winsize) error { // IoctlSetTermios performs an ioctl on fd with a *Termios. // // The req value is expected to be TCSETS, TCSETSW, or TCSETSF -func IoctlSetTermios(fd int, req uint, value *Termios) error { +func IoctlSetTermios(fd int, req int, value *Termios) error { if (req != TCSETS) && (req != TCSETSW) && (req != TCSETSF) { return ENOSYS } @@ -47,13 +47,13 @@ func IoctlSetTermios(fd int, req uint, value *Termios) error { // // A few ioctl requests use the return value as an output parameter; // for those, IoctlRetInt should be used instead of this function. -func IoctlGetInt(fd int, req uint) (int, error) { +func IoctlGetInt(fd int, req int) (int, error) { var value int err := ioctlPtr(fd, req, unsafe.Pointer(&value)) return value, err } -func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { +func IoctlGetWinsize(fd int, req int) (*Winsize, error) { var value Winsize err := ioctlPtr(fd, req, unsafe.Pointer(&value)) return &value, err @@ -62,7 +62,7 @@ func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { // IoctlGetTermios performs an ioctl on fd with a *Termios. // // The req value is expected to be TCGETS -func IoctlGetTermios(fd int, req uint) (*Termios, error) { +func IoctlGetTermios(fd int, req int) (*Termios, error) { var value Termios if req != TCGETS { return &value, ENOSYS diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index 7456d9d..be0423e 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -66,6 +66,7 @@ includes_Darwin=' #include #include #include +#include #include #include #include @@ -203,6 +204,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -517,10 +519,11 @@ ccflags="$@" $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || $2 ~ /^LO_(KEY|NAME)_SIZE$/ || $2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ || - $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT)_/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || $2 ~ /^NFC_.*_(MAX)?SIZE$/ || $2 ~ /^RAW_PAYLOAD_/ || + $2 ~ /^[US]F_/ || $2 ~ /^TP_STATUS_/ || $2 ~ /^FALLOC_/ || $2 ~ /^ICMPV?6?_(FILTER|SEC)/ || diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go index d9f5544..c406ae0 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -408,8 +408,8 @@ func (w WaitStatus) CoreDump() bool { return w&0x80 == 0x80 } func (w WaitStatus) TrapCause() int { return -1 } -//sys ioctl(fd int, req uint, arg uintptr) (err error) -//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = ioctl +//sys ioctl(fd int, req int, arg uintptr) (err error) +//sys ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = ioctl // fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX // There is no way to create a custom fcntl and to keep //sys fcntl easily, diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go index e92a0be..f2871fa 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go @@ -8,7 +8,6 @@ package unix //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64 -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64 //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go index 16eed17..75718ec 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go @@ -8,7 +8,6 @@ package unix //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64 diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 7064d6e..2069215 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -613,6 +613,7 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { //sys Rmdir(path string) (err error) //sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) //sys Setegid(egid int) (err error) //sysnb Seteuid(euid int) (err error) //sysnb Setgid(gid int) (err error) @@ -622,7 +623,6 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { //sys Setprivexec(flag int) (err error) //sysnb Setregid(rgid int, egid int) (err error) //sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) //sysnb Setuid(uid int) (err error) @@ -676,7 +676,6 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { // Kqueue_from_portset_np // Kqueue_portset // Getattrlist -// Setattrlist // Getdirentriesattr // Searchfs // Delete diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go index 221efc2..d4ce988 100644 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -326,7 +326,6 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sysnb Setreuid(ruid int, euid int) (err error) //sysnb Setresgid(rgid int, egid int, sgid int) (err error) //sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) //sysnb Setuid(uid int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go index 5bdde03..afb1010 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -433,7 +433,6 @@ func Dup3(oldfd, newfd, flags int) error { //sysnb Setreuid(ruid int, euid int) (err error) //sysnb Setresgid(rgid int, egid int, sgid int) (err error) //sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) //sysnb Setuid(uid int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 9735331..fbaeb5f 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -1873,7 +1873,6 @@ func Getpgrp() (pid int) { //sys OpenTree(dfd int, fileName string, flags uint) (r int, err error) //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT -//sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) //sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 //sys read(fd int, p []byte) (n int, err error) @@ -1887,6 +1886,15 @@ func Getpgrp() (pid int) { //sysnb Settimeofday(tv *Timeval) (err error) //sys Setns(fd int, nstype int) (err error) +//go:linkname syscall_prlimit syscall.prlimit +func syscall_prlimit(pid, resource int, newlimit, old *syscall.Rlimit) error + +func Prlimit(pid, resource int, newlimit, old *Rlimit) error { + // Just call the syscall version, because as of Go 1.21 + // it will affect starting a new process. + return syscall_prlimit(pid, resource, (*syscall.Rlimit)(newlimit), (*syscall.Rlimit)(old)) +} + // PrctlRetInt performs a prctl operation specified by option and further // optional arguments arg2 through arg5 depending on option. It returns a // non-negative integer that is returned by the prctl syscall. diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go index ff5b589..c7d9945 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -97,33 +97,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { return } -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { newoffset, errno := seek(fd, offset, whence) if errno != 0 { diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index 9b27035..5b21fcf 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -46,7 +46,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go index 856ad1d..da29864 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -171,33 +171,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { return } -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) } func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index 6422704..a81f574 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -39,7 +39,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) @@ -143,15 +142,6 @@ func Getrlimit(resource int, rlim *Rlimit) error { return getrlimit(resource, rlim) } -// Setrlimit prefers the prlimit64 system call. See issue 38604. -func Setrlimit(resource int, rlim *Rlimit) error { - err := Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - return setrlimit(resource, rlim) -} - func (r *PtraceRegs) PC() uint64 { return r.Pc } func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go index 59dab51..69d2d7c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -126,11 +126,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { return } -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - return -} - func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { if tv == nil { return utimensat(dirfd, path, nil, 0) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go index bfef09a..76d5640 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -37,7 +37,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Statfs(path string, buf *Statfs_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go index ab30250..aae7f0f 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -151,33 +151,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { return } -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - func (r *PtraceRegs) PC() uint64 { return r.Epc } func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go index eac1cf1..66eff19 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go @@ -159,33 +159,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { return } -//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT - -func Setrlimit(resource int, rlim *Rlimit) (err error) { - err = Prlimit(0, resource, rlim, nil) - if err != ENOSYS { - return err - } - - rl := rlimit32{} - if rlim.Cur == rlimInf64 { - rl.Cur = rlimInf32 - } else if rlim.Cur < uint64(rlimInf32) { - rl.Cur = uint32(rlim.Cur) - } else { - return EINVAL - } - if rlim.Max == rlimInf64 { - rl.Max = rlimInf32 - } else if rlim.Max < uint64(rlimInf32) { - rl.Max = uint32(rlim.Max) - } else { - return EINVAL - } - - return setrlimit(resource, &rl) -} - func (r *PtraceRegs) PC() uint32 { return r.Nip } func (r *PtraceRegs) SetPC(pc uint32) { r.Nip = pc } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go index 4df5661..806aa25 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -34,7 +34,6 @@ package unix //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Stat(path string, stat *Stat_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 5f4243d..35851ef 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -38,7 +38,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go index d0a7d40..2f89e8f 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -34,7 +34,6 @@ import ( //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Stat(path string, stat *Stat_t) (err error) //sys Statfs(path string, buf *Statfs_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go index f5c793b..7ca064a 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -31,7 +31,6 @@ package unix //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys setfsgid(gid int) (prev int, err error) //sys setfsuid(uid int) (prev int, err error) -//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) //sys Stat(path string, stat *Stat_t) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go index e66865d..018d7d4 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -340,7 +340,6 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { //sys Setpriority(which int, who int, prio int) (err error) //sysnb Setregid(rgid int, egid int) (err error) //sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) //sysnb Setuid(uid int) (err error) @@ -501,7 +500,6 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { // compat_43_osendmsg // compat_43_osethostid // compat_43_osethostname -// compat_43_osetrlimit // compat_43_osigblock // compat_43_osigsetmask // compat_43_osigstack diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go index 5e9de23..f9c7a96 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -294,7 +294,6 @@ func Uname(uname *Utsname) error { //sysnb Setreuid(ruid int, euid int) (err error) //sysnb Setresgid(rgid int, egid int, sgid int) (err error) //sysnb Setresuid(ruid int, euid int, suid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setrtable(rtable int) (err error) //sysnb Setsid() (pid int, err error) //sysnb Settimeofday(tp *Timeval) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index d3444b6..b600a28 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -545,24 +545,24 @@ func Minor(dev uint64) uint32 { * Expose the ioctl function */ -//sys ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) = libc.ioctl -//sys ioctlPtrRet(fd int, req uint, arg unsafe.Pointer) (ret int, err error) = libc.ioctl +//sys ioctlRet(fd int, req int, arg uintptr) (ret int, err error) = libc.ioctl +//sys ioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) = libc.ioctl -func ioctl(fd int, req uint, arg uintptr) (err error) { +func ioctl(fd int, req int, arg uintptr) (err error) { _, err = ioctlRet(fd, req, arg) return err } -func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { +func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { _, err = ioctlPtrRet(fd, req, arg) return err } -func IoctlSetTermio(fd int, req uint, value *Termio) error { +func IoctlSetTermio(fd int, req int, value *Termio) error { return ioctlPtr(fd, req, unsafe.Pointer(value)) } -func IoctlGetTermio(fd int, req uint) (*Termio, error) { +func IoctlGetTermio(fd int, req int) (*Termio, error) { var value Termio err := ioctlPtr(fd, req, unsafe.Pointer(&value)) return &value, err @@ -665,7 +665,6 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys Setpriority(which int, who int, prio int) (err error) //sysnb Setregid(rgid int, egid int) (err error) //sysnb Setreuid(ruid int, euid int) (err error) -//sysnb Setrlimit(which int, lim *Rlimit) (err error) //sysnb Setsid() (pid int, err error) //sysnb Setuid(uid int) (err error) //sys Shutdown(s int, how int) (err error) = libsocket.shutdown @@ -1080,11 +1079,11 @@ func Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags return retCl, retData, flags, nil } -func IoctlSetIntRetInt(fd int, req uint, arg int) (int, error) { +func IoctlSetIntRetInt(fd int, req int, arg int) (int, error) { return ioctlRet(fd, req, uintptr(arg)) } -func IoctlSetString(fd int, req uint, val string) error { +func IoctlSetString(fd int, req int, val string) error { bs := make([]byte, len(val)+1) copy(bs[:len(bs)-1], val) err := ioctlPtr(fd, req, unsafe.Pointer(&bs[0])) @@ -1120,7 +1119,7 @@ func (l *Lifreq) GetLifruUint() uint { return *(*uint)(unsafe.Pointer(&l.Lifru[0])) } -func IoctlLifreq(fd int, req uint, l *Lifreq) error { +func IoctlLifreq(fd int, req int, l *Lifreq) error { return ioctlPtr(fd, req, unsafe.Pointer(l)) } @@ -1131,6 +1130,6 @@ func (s *Strioctl) SetInt(i int) { s.Dp = (*int8)(unsafe.Pointer(&i)) } -func IoctlSetStrioctlRetInt(fd int, req uint, s *Strioctl) (int, error) { +func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) { return ioctlPtrRet(fd, req, unsafe.Pointer(s)) } diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go index 00f0aa3..8e48c29 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -587,3 +587,10 @@ func emptyIovecs(iov []Iovec) bool { } return true } + +// Setrlimit sets a resource limit. +func Setrlimit(resource int, rlim *Rlimit) error { + // Just call the syscall version, because as of Go 1.21 + // it will affect starting a new process. + return syscall.Setrlimit(resource, (*syscall.Rlimit)(rlim)) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index b295497..d3d49ec 100644 --- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -212,8 +212,8 @@ func (cmsg *Cmsghdr) SetLen(length int) { //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___SENDMSG_A //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) = SYS_MMAP //sys munmap(addr uintptr, length uintptr) (err error) = SYS_MUNMAP -//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL -//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL +//sys ioctl(fd int, req int, arg uintptr) (err error) = SYS_IOCTL +//sys ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = SYS_IOCTL //sys Access(path string, mode uint32) (err error) = SYS___ACCESS_A //sys Chdir(path string) (err error) = SYS___CHDIR_A diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index 476a1c7..1430076 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -1270,6 +1270,16 @@ const ( SEEK_END = 0x2 SEEK_HOLE = 0x3 SEEK_SET = 0x0 + SF_APPEND = 0x40000 + SF_ARCHIVED = 0x10000 + SF_DATALESS = 0x40000000 + SF_FIRMLINK = 0x800000 + SF_IMMUTABLE = 0x20000 + SF_NOUNLINK = 0x100000 + SF_RESTRICTED = 0x80000 + SF_SETTABLE = 0x3fff0000 + SF_SUPPORTED = 0x9f0000 + SF_SYNTHETIC = 0xc0000000 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1543,6 +1553,15 @@ const ( TIOCTIMESTAMP = 0x40107459 TIOCUCNTL = 0x80047466 TOSTOP = 0x400000 + UF_APPEND = 0x4 + UF_COMPRESSED = 0x20 + UF_DATAVAULT = 0x80 + UF_HIDDEN = 0x8000 + UF_IMMUTABLE = 0x2 + UF_NODUMP = 0x1 + UF_OPAQUE = 0x8 + UF_SETTABLE = 0xffff + UF_TRACKED = 0x40 VDISCARD = 0xf VDSUSP = 0xb VEOF = 0x0 diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index e36f517..ab044a7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -1270,6 +1270,16 @@ const ( SEEK_END = 0x2 SEEK_HOLE = 0x3 SEEK_SET = 0x0 + SF_APPEND = 0x40000 + SF_ARCHIVED = 0x10000 + SF_DATALESS = 0x40000000 + SF_FIRMLINK = 0x800000 + SF_IMMUTABLE = 0x20000 + SF_NOUNLINK = 0x100000 + SF_RESTRICTED = 0x80000 + SF_SETTABLE = 0x3fff0000 + SF_SUPPORTED = 0x9f0000 + SF_SYNTHETIC = 0xc0000000 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -1543,6 +1553,15 @@ const ( TIOCTIMESTAMP = 0x40107459 TIOCUCNTL = 0x80047466 TOSTOP = 0x400000 + UF_APPEND = 0x4 + UF_COMPRESSED = 0x20 + UF_DATAVAULT = 0x80 + UF_HIDDEN = 0x8000 + UF_IMMUTABLE = 0x2 + UF_NODUMP = 0x1 + UF_OPAQUE = 0x8 + UF_SETTABLE = 0xffff + UF_TRACKED = 0x40 VDISCARD = 0xf VDSUSP = 0xb VEOF = 0x0 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 398c37e..de936b6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -2967,6 +2967,7 @@ const ( SOL_TCP = 0x6 SOL_TIPC = 0x10f SOL_TLS = 0x11a + SOL_UDP = 0x11 SOL_X25 = 0x106 SOL_XDP = 0x11b SOMAXCONN = 0x1000 @@ -3251,6 +3252,19 @@ const ( TRACEFS_MAGIC = 0x74726163 TS_COMM_LEN = 0x20 UDF_SUPER_MAGIC = 0x15013346 + UDP_CORK = 0x1 + UDP_ENCAP = 0x64 + UDP_ENCAP_ESPINUDP = 0x2 + UDP_ENCAP_ESPINUDP_NON_IKE = 0x1 + UDP_ENCAP_GTP0 = 0x4 + UDP_ENCAP_GTP1U = 0x5 + UDP_ENCAP_L2TPINUDP = 0x3 + UDP_GRO = 0x68 + UDP_NO_CHECK6_RX = 0x66 + UDP_NO_CHECK6_TX = 0x65 + UDP_SEGMENT = 0x67 + UDP_V4_FLOW = 0x2 + UDP_V6_FLOW = 0x6 UMOUNT_NOFOLLOW = 0x8 USBDEVICE_SUPER_MAGIC = 0x9fa2 UTIME_NOW = 0x3fffffff diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go index ef9dcd1..9a25721 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go @@ -124,7 +124,6 @@ int utime(uintptr_t, uintptr_t); unsigned long long getsystemcfg(int); int umount(uintptr_t); int getrlimit64(int, uintptr_t); -int setrlimit64(int, uintptr_t); long long lseek64(int, long long, int); uintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long); @@ -213,7 +212,7 @@ func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctl(fd int, req uint, arg uintptr) (err error) { +func ioctl(fd int, req int, arg uintptr) (err error) { r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)) if r0 == -1 && er != nil { err = er @@ -223,7 +222,7 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { +func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(uintptr(arg))) if r0 == -1 && er != nil { err = er @@ -1464,16 +1463,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - r0, er := C.setrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim)))) - if r0 == -1 && er != nil { - err = er - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Seek(fd int, offset int64, whence int) (off int64, err error) { r0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence)) off = int64(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go index f86a945..6de80c2 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go @@ -93,8 +93,8 @@ func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, e1 := callioctl(fd, int(req), arg) +func ioctl(fd int, req int, arg uintptr) (err error) { + _, e1 := callioctl(fd, req, arg) if e1 != 0 { err = errnoErr(e1) } @@ -103,8 +103,8 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { - _, e1 := callioctl_ptr(fd, int(req), arg) +func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { + _, e1 := callioctl_ptr(fd, req, arg) if e1 != 0 { err = errnoErr(e1) } @@ -1422,16 +1422,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, e1 := callsetrlimit(resource, uintptr(unsafe.Pointer(rlim))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Seek(fd int, offset int64, whence int) (off int64, err error) { r0, e1 := calllseek(fd, offset, whence) off = int64(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go index d32a84c..c4d50ae 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go @@ -124,7 +124,6 @@ import ( //go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o" //go:cgo_import_dynamic libc_umount umount "libc.a/shr_64.o" //go:cgo_import_dynamic libc_getrlimit getrlimit "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.a/shr_64.o" //go:cgo_import_dynamic libc_lseek lseek "libc.a/shr_64.o" //go:cgo_import_dynamic libc_mmap64 mmap64 "libc.a/shr_64.o" @@ -242,7 +241,6 @@ import ( //go:linkname libc_getsystemcfg libc_getsystemcfg //go:linkname libc_umount libc_umount //go:linkname libc_getrlimit libc_getrlimit -//go:linkname libc_setrlimit libc_setrlimit //go:linkname libc_lseek libc_lseek //go:linkname libc_mmap64 libc_mmap64 @@ -363,7 +361,6 @@ var ( libc_getsystemcfg, libc_umount, libc_getrlimit, - libc_setrlimit, libc_lseek, libc_mmap64 syscallFunc ) @@ -1179,13 +1176,6 @@ func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { - r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0) - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) return diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go index d7d8baf..6903d3b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go @@ -123,7 +123,6 @@ int utime(uintptr_t, uintptr_t); unsigned long long getsystemcfg(int); int umount(uintptr_t); int getrlimit(int, uintptr_t); -int setrlimit(int, uintptr_t); long long lseek(int, long long, int); uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long); @@ -131,6 +130,7 @@ uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long); import "C" import ( "syscall" + "unsafe" ) // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1055,14 +1055,6 @@ func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.setrlimit(C.int(resource), C.uintptr_t(rlim))) - e1 = syscall.GetErrno() - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { r1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence))) e1 = syscall.GetErrno() diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index a29ffdd..4037ccf 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -1992,6 +1992,31 @@ var libc_select_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(attrBuf) > 0 { + _p1 = unsafe.Pointer(&attrBuf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setattrlist_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Setegid(egid int) (err error) { _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) if e1 != 0 { @@ -2123,20 +2148,6 @@ var libc_setreuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index 95fe4c0..4baaed0 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -705,6 +705,11 @@ TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) +TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setattrlist(SB) +GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) + TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setegid(SB) @@ -759,12 +764,6 @@ TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) - -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setsid(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index 2fd4590..51d6f3f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -1992,6 +1992,31 @@ var libc_select_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(attrBuf) > 0 { + _p1 = unsafe.Pointer(&attrBuf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_setattrlist_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Setegid(egid int) (err error) { _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) if e1 != 0 { @@ -2123,20 +2148,6 @@ var libc_setreuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index efa5b4c..c3b82c0 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -705,6 +705,11 @@ TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) +TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setattrlist(SB) +GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) + TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setegid(SB) @@ -759,12 +764,6 @@ TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) - -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setsid(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go index 3b85134..0eabac7 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go @@ -1410,16 +1410,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go index 1129065..ee313eb 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -1645,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go index 55f5abf..4c986e4 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -1645,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go index d39651c..5552169 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -1645,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go index ddb7408..67a226f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go @@ -1645,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go index 09a53a6..f0b9dda 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go @@ -1645,16 +1645,6 @@ func Setresuid(ruid int, euid int, suid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 430cb24..da63d9d 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -1346,16 +1346,6 @@ func PivotRoot(newroot string, putold string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { - _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go index c81b0ad..07b549c 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -411,16 +411,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go index 2206bce..5f481bf 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -334,16 +334,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go index edf6b39..824cd52 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -578,16 +578,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) { _, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go index 190609f..e77aecf 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -289,16 +289,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go index 5f984cb..961a3af 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -644,16 +644,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Alarm(seconds uint) (remaining uint, err error) { r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) remaining = uint(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go index 46fc380..ed05005 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -278,16 +278,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go index cbd0d4d..d365b71 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -278,16 +278,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go index 0c13d15..c3f1b8b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -644,16 +644,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Alarm(seconds uint) (remaining uint, err error) { r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) remaining = uint(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go index e01432a..a6574cf 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go @@ -624,16 +624,6 @@ func getrlimit(resource int, rlim *rlimit32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setrlimit(resource int, rlim *rlimit32) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go index 13c7ee7..f409902 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -349,16 +349,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go index 02d0c0f..9dfcc29 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -349,16 +349,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go index 9fee3b1..0b29239 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -269,16 +269,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go index 647bbfe..6cde322 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -319,16 +319,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) n = int64(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go index ada057f..5253d65 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -329,16 +329,6 @@ func setfsuid(uid int) (prev int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Shutdown(fd int, how int) (err error) { _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go index 8e1d9c8..cdb2af5 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -1607,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go index 21c6950..9d25f76 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -1607,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go index 298168f..d3f8035 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -1607,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go index 68b8bd4..887188a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go @@ -1607,16 +1607,6 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index 0b0f910..6699a78 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s index 0874442..04f0de3 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $4 DATA ·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index 48ff5de..1e775fe 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s index 5782cd1..27b6f4d 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index 2452a64..7f64278 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s index cf31042..b797045 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $4 DATA ·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $4 -DATA ·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index 5e35600..756ef7b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s index 484bb42..a871266 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go index b04cef1..7bc2e24 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s index 55af272..05d4bff 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go index 47a07ee..739be62 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s index 4028255..74a25f8 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s @@ -687,12 +687,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - CALL libc_setrlimit(SB) - RET -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 CALL libc_setrtable(SB) RET diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go index 573378f..7d95a19 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go @@ -1894,20 +1894,6 @@ var libc_setresuid_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -var libc_setrlimit_trampoline_addr uintptr - -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setrtable(rtable int) (err error) { _, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s index e1fbd4d..990be24 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s @@ -573,11 +573,6 @@ TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_setresuid_trampoline_addr(SB), RODATA, $8 DATA ·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB) -TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) - TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrtable(SB) GLOBL ·libc_setrtable_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index 4873a1e..609d1c5 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -110,7 +110,6 @@ import ( //go:cgo_import_dynamic libc_setpriority setpriority "libc.so" //go:cgo_import_dynamic libc_setregid setregid "libc.so" //go:cgo_import_dynamic libc_setreuid setreuid "libc.so" -//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" //go:cgo_import_dynamic libc_setsid setsid "libc.so" //go:cgo_import_dynamic libc_setuid setuid "libc.so" //go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so" @@ -250,7 +249,6 @@ import ( //go:linkname procSetpriority libc_setpriority //go:linkname procSetregid libc_setregid //go:linkname procSetreuid libc_setreuid -//go:linkname procSetrlimit libc_setrlimit //go:linkname procSetsid libc_setsid //go:linkname procSetuid libc_setuid //go:linkname procshutdown libc_shutdown @@ -391,7 +389,6 @@ var ( procSetpriority, procSetregid, procSetreuid, - procSetrlimit, procSetsid, procSetuid, procshutdown, @@ -646,7 +643,7 @@ func __minor(version int, dev uint64) (val uint) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) { +func ioctlRet(fd int, req int, arg uintptr) (ret int, err error) { r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) ret = int(r0) if e1 != 0 { @@ -657,7 +654,7 @@ func ioctlRet(fd int, req uint, arg uintptr) (ret int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctlPtrRet(fd int, req uint, arg unsafe.Pointer) (ret int, err error) { +func ioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) { r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) ret = int(r0) if e1 != 0 { @@ -1650,16 +1647,6 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Setsid() (pid int, err error) { r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0) pid = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go index 07bfe2e..c316817 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go @@ -257,7 +257,7 @@ func munmap(addr uintptr, length uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctl(fd int, req uint, arg uintptr) (err error) { +func ioctl(fd int, req int, arg uintptr) (err error) { _, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) @@ -267,7 +267,7 @@ func ioctl(fd int, req uint, arg uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { +func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { _, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go index e2a64f0..690cefc 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -151,6 +151,16 @@ type Dirent struct { _ [3]byte } +type Attrlist struct { + Bitmapcount uint16 + Reserved uint16 + Commonattr uint32 + Volattr uint32 + Dirattr uint32 + Fileattr uint32 + Forkattr uint32 +} + const ( PathMax = 0x400 ) @@ -610,6 +620,7 @@ const ( AT_REMOVEDIR = 0x80 AT_SYMLINK_FOLLOW = 0x40 AT_SYMLINK_NOFOLLOW = 0x20 + AT_EACCESS = 0x10 ) type PollFd struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go index 34aa775..5bffc10 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -151,6 +151,16 @@ type Dirent struct { _ [3]byte } +type Attrlist struct { + Bitmapcount uint16 + Reserved uint16 + Commonattr uint32 + Volattr uint32 + Dirattr uint32 + Fileattr uint32 + Forkattr uint32 +} + const ( PathMax = 0x400 ) @@ -610,6 +620,7 @@ const ( AT_REMOVEDIR = 0x80 AT_SYMLINK_FOLLOW = 0x40 AT_SYMLINK_NOFOLLOW = 0x20 + AT_EACCESS = 0x10 ) type PollFd struct { diff --git a/vendor/golang.org/x/sys/windows/env_windows.go b/vendor/golang.org/x/sys/windows/env_windows.go index 92ac05f..b8ad192 100644 --- a/vendor/golang.org/x/sys/windows/env_windows.go +++ b/vendor/golang.org/x/sys/windows/env_windows.go @@ -37,14 +37,14 @@ func (token Token) Environ(inheritExisting bool) (env []string, err error) { return nil, err } defer DestroyEnvironmentBlock(block) - blockp := uintptr(unsafe.Pointer(block)) + blockp := unsafe.Pointer(block) for { - entry := UTF16PtrToString((*uint16)(unsafe.Pointer(blockp))) + entry := UTF16PtrToString((*uint16)(blockp)) if len(entry) == 0 { break } env = append(env, entry) - blockp += 2 * (uintptr(len(entry)) + 1) + blockp = unsafe.Add(blockp, 2*(len(entry)+1)) } return env, nil } diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go index 75980fd..a52e033 100644 --- a/vendor/golang.org/x/sys/windows/exec_windows.go +++ b/vendor/golang.org/x/sys/windows/exec_windows.go @@ -95,12 +95,17 @@ func ComposeCommandLine(args []string) string { // DecomposeCommandLine breaks apart its argument command line into unescaped parts using CommandLineToArgv, // as gathered from GetCommandLine, QUERY_SERVICE_CONFIG's BinaryPathName argument, or elsewhere that // command lines are passed around. +// DecomposeCommandLine returns error if commandLine contains NUL. func DecomposeCommandLine(commandLine string) ([]string, error) { if len(commandLine) == 0 { return []string{}, nil } + utf16CommandLine, err := UTF16FromString(commandLine) + if err != nil { + return nil, errorspkg.New("string with NUL passed to DecomposeCommandLine") + } var argc int32 - argv, err := CommandLineToArgv(StringToUTF16Ptr(commandLine), &argc) + argv, err := CommandLineToArgv(&utf16CommandLine[0], &argc) if err != nil { return nil, err } diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go index f8deca8..c964b68 100644 --- a/vendor/golang.org/x/sys/windows/service.go +++ b/vendor/golang.org/x/sys/windows/service.go @@ -141,6 +141,12 @@ const ( SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON = 1 ) +type ENUM_SERVICE_STATUS struct { + ServiceName *uint16 + DisplayName *uint16 + ServiceStatus SERVICE_STATUS +} + type SERVICE_STATUS struct { ServiceType uint32 CurrentState uint32 @@ -245,3 +251,4 @@ type QUERY_SERVICE_LOCK_STATUS struct { //sys UnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications? //sys RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) = advapi32.RegisterServiceCtrlHandlerExW //sys QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) = advapi32.QueryServiceDynamicInformation? +//sys EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) = advapi32.EnumDependentServicesW diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index 857acf1..88e62a6 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -2220,19 +2220,23 @@ type JOBOBJECT_BASIC_UI_RESTRICTIONS struct { } const ( - // JobObjectInformationClass + // JobObjectInformationClass for QueryInformationJobObject and SetInformationJobObject JobObjectAssociateCompletionPortInformation = 7 + JobObjectBasicAccountingInformation = 1 + JobObjectBasicAndIoAccountingInformation = 8 JobObjectBasicLimitInformation = 2 + JobObjectBasicProcessIdList = 3 JobObjectBasicUIRestrictions = 4 JobObjectCpuRateControlInformation = 15 JobObjectEndOfJobTimeInformation = 6 JobObjectExtendedLimitInformation = 9 JobObjectGroupInformation = 11 JobObjectGroupInformationEx = 14 - JobObjectLimitViolationInformation2 = 35 + JobObjectLimitViolationInformation = 13 + JobObjectLimitViolationInformation2 = 34 JobObjectNetRateControlInformation = 32 JobObjectNotificationLimitInformation = 12 - JobObjectNotificationLimitInformation2 = 34 + JobObjectNotificationLimitInformation2 = 33 JobObjectSecurityLimitInformation = 5 ) diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 6d2a268..a81ea2c 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -86,6 +86,7 @@ var ( procDeleteService = modadvapi32.NewProc("DeleteService") procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource") procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx") + procEnumDependentServicesW = modadvapi32.NewProc("EnumDependentServicesW") procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") procEqualSid = modadvapi32.NewProc("EqualSid") procFreeSid = modadvapi32.NewProc("FreeSid") @@ -734,6 +735,14 @@ func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes return } +func EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procEnumDependentServicesW.Addr(), 6, uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) { r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0) if r1 == 0 { diff --git a/vendor/modules.txt b/vendor/modules.txt index d427604..9c673c8 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -14,6 +14,18 @@ github.com/cloudfoundry/jibber_jabber # github.com/davecgh/go-spew v1.1.1 ## explicit github.com/davecgh/go-spew/spew +# github.com/docker/cli v20.10.15+incompatible +## explicit +github.com/docker/cli/cli/config +github.com/docker/cli/cli/config/configfile +github.com/docker/cli/cli/config/credentials +github.com/docker/cli/cli/config/types +github.com/docker/cli/cli/connhelper +github.com/docker/cli/cli/connhelper/commandconn +github.com/docker/cli/cli/connhelper/ssh +github.com/docker/cli/cli/context +github.com/docker/cli/cli/context/docker +github.com/docker/cli/cli/context/store # github.com/docker/distribution v2.8.2+incompatible ## explicit github.com/docker/distribution/digestset @@ -38,7 +50,12 @@ github.com/docker/docker/api/types/versions github.com/docker/docker/api/types/volume github.com/docker/docker/client github.com/docker/docker/errdefs +github.com/docker/docker/pkg/homedir github.com/docker/docker/pkg/stdcopy +# github.com/docker/docker-credential-helpers v0.8.0 +## explicit; go 1.19 +github.com/docker/docker-credential-helpers/client +github.com/docker/docker-credential-helpers/credentials # github.com/docker/go-connections v0.4.0 ## explicit github.com/docker/go-connections/nat @@ -50,6 +67,9 @@ github.com/docker/go-units # github.com/fatih/color v1.10.0 ## explicit; go 1.13 github.com/fatih/color +# github.com/fvbommel/sortorder v1.1.0 +## explicit; go 1.13 +github.com/fvbommel/sortorder # github.com/gdamore/encoding v1.0.0 ## explicit; go 1.9 github.com/gdamore/encoding @@ -208,8 +228,9 @@ golang.org/x/exp/constraints ## explicit; go 1.11 golang.org/x/net/internal/socks golang.org/x/net/proxy -# golang.org/x/sys v0.6.0 +# golang.org/x/sys v0.8.0 ## explicit; go 1.17 +golang.org/x/sys/execabs golang.org/x/sys/internal/unsafeheader golang.org/x/sys/plan9 golang.org/x/sys/unix