MCPcopy Create free account
hub / github.com/celer-pkg/celer / checkSymlink

Method checkSymlink

buildsystems/buildconfig.go:786–832  ·  view source on GitHub ↗

checkSymlink create a symlink in the sysroot.

(src, dest string)

Source from the content-addressed store, hash-verified

784
785// checkSymlink create a symlink in the sysroot.
786func (b BuildConfig) checkSymlink(src, dest string) error {
787 // Convenient function to create a relative symlink.
788 createSymlink := func(src, dest string) error {
789 relPath, err := filepath.Rel(filepath.Dir(dest), src)
790 if err != nil {
791 return fmt.Errorf("compute relative path\n %w", err)
792 }
793 if err := os.Symlink(relPath, dest); err != nil {
794 return fmt.Errorf("create symlink\n %w", err)
795 }
796 return nil
797 }
798
799 // Check if the symlink exists.
800 info, err := os.Lstat(dest)
801 if err != nil {
802 if os.IsNotExist(err) {
803 return createSymlink(src, dest)
804 }
805 return fmt.Errorf("checking symlink: %v", err)
806 }
807
808 // Check the symlink target.
809 if info.Mode()&os.ModeSymlink != 0 {
810 // Read the target of the symlink.
811 realTarget, err := os.Readlink(dest)
812 if err != nil {
813 return fmt.Errorf("read symlink target: %v", err)
814 }
815
816 // If symlink is broken or points to the wrong target, remove it and recreate.
817 if realTarget != src {
818 if err := os.RemoveAll(dest); err != nil {
819 return fmt.Errorf("remove broken symlink: %v", err)
820 }
821 return createSymlink(src, dest)
822 }
823
824 return nil
825 }
826
827 // Remove if it's not a symlink.
828 if err = os.RemoveAll(dest); err != nil {
829 return fmt.Errorf("remove non-symlink: %v", err)
830 }
831 return createSymlink(src, dest)
832}
833
834func (b BuildConfig) parseBuildSystem(value string) (name, version string, hasVersion bool, err error) {
835 value = strings.TrimSpace(value)

Callers 1

InstallMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected