프로젝트는 로컬 파일 시스템의 프로젝트 디렉토리에 위치하지 않는 자원을 포함할 수 있습니다. 이러한 자원을 링크된 자원이라 합니다.
링크된 자원은 파일 시스템에서 직접 조작하는 저장소 제공자에 대해 특별 인증 확인을 할 수 있습니다. 이것은 디자인으로 링크된 자원이 파일 시스템의 직접 프로젝트 디렉토리 트리에 없다는 사실의 결과입니다.
다음 특성을 나타내는 제공자는 링크된 자원에 의해 영향을 받을 수 있습니다.
첫 번째의 경우 사용자가 링크된 자원을 선택하여 이에 대해 제공자 조작을 수행하려는 것으로 간주합니다. 제공자가 명령행 클라이언트를 호출하므로, 제공자가 결과 파일 시스템 위치를 명령행 프로그램에 인수로서 제공하며 첫 번째 호출 IResource.getLocation().toOSString()에 상응하는 작업을 수행하는 것으로 간주할 수 있습니다. 해당 자원이 링크된 자원인 경우, 이를 통해 프로젝트 디렉토리 트리 외부에 파일/폴더를 가져옵니다. 모든 명령행 클라이언트가 이 문제를 처리할 수 있을 것으로 기대할 수는 없습니다. 요컨대 제공자가 자원의 파일 시스템 위치를 확보하려면 링크된 자원을 처리하는 데 추가 작업이 필요할 수 있습니다.
두 번째의 경우 프로젝트 자원의 구조가 파일 시스템 파일/폴더의 구조와 1:1이라는 암시적 가정을 한다는 점에서 매우 비슷합니다. 일반적으로 제공자가 IResource 및 java.io.File 조작을 혼합할 경우 문제가 있을 수 있습니다. 예를 들어, 링크의 경우 IFile의 상위는 동일한 것이라고 가정되면 실패하는 java.io.File의 상위 및 코드와 동일하지 않습니다.
링크된 자원을 사용해도 기존 제공자를 실수로 중단하지 않는다는 것은 중요한 사항이었습니다. 특히, 제공자가 중요시하는 점은 로컬 파일 시스템 구조가 프로젝트 구조를 이중복사한 것으로 무리 없이 받아들이는 것이었습니다. 따라서 기본적으로 링크된 자원은 그러한 제공자에 맵핑되는 프로젝트에 추가될 수 없습니다. 또한 링크 자원이 포함된 프로젝트는 기본적으로 해당 제공자와 공유될 수 없습니다.
"익숙한 링크"가 되기 위해 제공자는 링크된 자원이 있는 프로젝트는 버전 제어를 허용하지만, 링크된 자원의 버전 제어를 금지할 수 있습니다.
더욱 복잡한 솔루션은 실제 링크된 자원의 버전화를 허용하는 것이지만, 복잡한 시나리오가 사용되므로 만족스럽지 않을 수 있습니다. (예: 파일은 다른 제공자의 다른 프로젝트 하에서 이미 버전 제어될 수 있습니다.) 그러므로 버전 제어되지 않는 링크된 자원이 포함된 버전 제어되는 프로젝트를 지원하는 것이 좋습니다.
저장소 제공자 구현은 RepositoryProvider.canHandleLinkedResources() 메소드가 true를 리턴하도록 대체하여 링크된 자원을 지원하도록 업그레이드될 수 있습니다. 일단 이 작업이 수행되면 링크된 자원은 해당 저장소 제공자와 공유한 프로젝트에 존재할 수 있습니다. 그러나 저장소 제공자는 링크된 자원이 적절히 처리되었는지 확인하기 위한 조치를 취해야 합니다. 위에서 언급했듯이 저장소 제공자는 모든 링크된 자원을 무시해야 합니다. 이것은 링크된 자원(및 해당 하위)이 저장소 제공자에 의해 지원되는 조치에서 제외되어야 함을 의미합니다. 또한 저장소 제공자 구현이 기본값 IMoveDeleteHook을 대체하는 경우, 저장소 제공자는 기본값 이동을 사용하여 링크된 자원의 작동을 삭제해야 합니다.
팀 제공자는 IResource.isLinked()를 사용하여 자원이 링크인지 여부를 결정할 수 있습니다. 그러나 이 메소드는 링크의 루트에 true만 리턴합니다. 다음 코드 세그먼트는 자원이 링크의 하위인지 여부를 결정하는 데 사용될 수 있습니다.
String linkedParentName = resource.getProjectRelativePath().segment(0); IFolder linkedParent = resource.getProject().getFolder(linkedParentName); boolean isLinked = linkedParent.isLinked();
저장소 제공자는 위의 코드가 true로 평가되는 자원을 제외해야 합니다.