명령줄 요약
작업 공간 작업의 일환으로 화물은 기능 통합을 수행합니다: https://doc.rust-lang.org/cargo/reference/features.html#feature-unification
이것은 무엇을 의미합니까?
작업 공간이 있다고 가정해 보세요.
[ workspace ]
members = [ " mega " , " potato " ]
멤버가 두 명인 경우: mega
[ package ]
name = " mega "
[ dependencies ]
potatoer = { version = " 0.2.1 " , features = [ " mega " ] }
그리고 potato
[ package ]
name = " potato "
[ dependencies ]
potatoer = { version = " 0.2.1 " , features = [ " potato " ] }
둘 다 일반적인 타사 크레이트 potatoer
에 의존하지만 기능은 다릅니다. mega
"mega"
기능에 관심이 있고, potato
"potato"
기능에 관심이 있습니다.
다른 명령을 실행할 때 여러 버전의 potatoer
상자가 필요하게 됩니다.
전체 작업 공간 명령은 통합 기능이 있는 버전을 사용합니다.
cargo check # this will use potatoer with both "mega" and "potato"
단일 크레이트에서 작동하는 명령은 통합되지 않은 버전을 사용합니다.
cargo check -p mega # this will use potatoer with "mega" feature
cargo check -p potatoer # this will use potatoer with "potato" feature
cargo check -p mega -p potato # this will require both "mega" and "potato"
필요한 조합이 포함된 종속성이 없으면 화물이 이를 컴파일합니다.
이 문제를 방지하는 한 가지 방법은 작업 공간의 구성원이 크레이트에 의존하는 경우 동일한 기능 세트를 사용하여 크레이트에 의존하는지 확인하는 것입니다. 손으로 유지 관리하는 것은 오류가 발생하기 쉬우며 이때 hackerman hack
및 hackerman restore
필요합니다.
--lock
옵션과 함께 사용하면 hackerman
모든 종속성의 체크섬을 가져와 ["package.metadata.hackerman.lock"]
아래 Cargo.toml
파일에 저장하고 후속 확인 호출을 통해 이 체크섬이 여전히 유효한지 확인합니다. .
이는 원래(해킹되지 않은) 종속성을 저장하고 나중에 복원할 수 있는지 확인하는 데 필요합니다.
작업 공간을 정의하는 Cargo.toml
파일에 --lock
옵션을 하드코딩하는 것이 가능합니다:
[ workspace . metadata . hackerman ]
lock = true
현재 통합은 크로스컴파일 지원 없이 현재 대상에 대해서만 수행됩니다. 버전 또는 {}
와 다른 구문을 사용하여 종속성을 지정하는 경우 작업공간 toml 파일에 대한 자동 업데이트가 작동하지 않을 수 있습니다.
potato = " 3.14 " # this is okay
banana = { version = " 3.14 " } # this is also okay
해커맨이 변경한 Cargo.toml
파일의 병합 및 리베이스 충돌을 해결합니다.
그것을 사용하려면 다음과 같은 것을 원합니다.
글로벌 .gitconfig
또는 로컬 .git/config
.
[merge "hackerman"]
name = merge restored files with hackerman
driver = cargo hackerman merge %O %A %B %P
gitattributes
파일은 프로젝트별로 로컬이거나 전역일 수 있습니다.
Cargo.toml merge=hackerman
전역 gitattributes
파일을 생성하려면 전역 git config 내에서 해당 파일에 대한 경로를 지정해야 합니다:
[core]
attributesfile = ~/.gitattributes
여기서는 작업 공간에서 통합에 대한 다양한 접근 방식의 효과를 비교하고 있습니다. 변경 사항 없이 모든 외부 종속성을 컴파일하는 작업과 관련된 전체 작업 공간을 완전히 검사하는 데 672초가 걸립니다.
작업 공간에는 여러 개의 크레이트가 포함되어 있으며, 여기서 a
, b
, c
등의 크레이트를 선택했습니다. 따라서 크레이트 b
는 크레이트 a
가져오고, 크레이트 c
크레이트 b
가져오는 식입니다. 크레이트 a
에는 외부 종속성이 없고 다른 크레이트에는 외부 종속성이 없습니다.
cargo hackerman hack
명령으로 해킹이 생성되었으며 모든 상자에 새로운 종속성이 추가되었습니다.명령을 실행하기 전에 컴파일 결과를 정리한 다음 각 열에 대한 명령을 순차적으로 정리합니다.
명령 | 해킹 안 해 | 해커맨 | 수동 해킹 |
---|---|---|---|
check -pa | 0.86초 | 0.80초 | 215.39초 |
check -pb | 211.30초 | 240.15초 | 113.56초 |
check -pc | 362.69초 | 233.38초 | 176.73초 |
check -pd | 36.16초 | 0.24초 | 0.25초 |
check -pe | 385.35초 | 66.34초 | 375.22초 |
check | 267.06초 | 93.29초 | 81.50초 |
총 | 1263.42 | 634.20 | 962.65 |
cargo hackerman
↴cargo hackerman hack
↴cargo hackerman restore
↴cargo hackerman check
↴cargo hackerman merge
↴cargo hackerman explain
↴cargo hackerman dupes
↴cargo hackerman tree
↴cargo hackerman show
↴ 작업 공간을 빠르게 컴파일하는 데 도움이 되는 도구 모음
용도 : cargo hackerman
COMMAND ...
사용 가능한 옵션:
-h
, --help
— 도움말 정보를 인쇄합니다.-V
, --version
— 버전 정보를 인쇄합니다.사용 가능한 명령:
hack
— 작업 공간의 개별 크레이트 전반에 걸쳐 크레이트 종속성을 통합합니다.restore
— hack
명령으로 추가된 크레이트 종속성 통합을 제거합니다.check
— 통합이 필요한지, 체크섬이 올바른지 확인합니다.merge
— 파일을 복원하고 기본 병합 드라이버로 병합합니다.explain
— 일부 종속성이 존재하는 이유를 설명합니다. 기능과 버전은 모두 선택 사항입니다.dupes
— 작업 공간의 모든 중복 항목을 나열합니다.tree
— 종속성으로 트리 만들기show
— 상자 매니페스트, 추가 정보, 저장소 또는 문서를 표시합니다. 더 자세한 도움말을 보려면 --help
두 번 전달할 수 있습니다.
작업 공간의 개별 크레이트 전반에 걸쳐 크레이트 종속성을 통합합니다.
사용법 : cargo hackerman
hack
CARGO_OPTS
[ --dry
] [ --lock
] [ -D
]
cargo hackerman restore
사용하여 이러한 변경 사항을 취소할 수 있습니다.
화물 옵션:
--manifest-path
= PATH
— Cargo.toml 파일 경로--frozen
— Cargo.lock이 필요하며 캐시가 최신 상태입니다.--locked
— Cargo.lock이 최신 상태여야 합니다.--offline
— 네트워크에 액세스하지 않고 실행-v
, --verbose
— 자세한 내용을 늘리고 여러 번 사용할 수 있습니다.사용 가능한 옵션:
--dry
— 작업을 수행하지 않고 표시만 합니다.
--lock
— 종속성 체크섬을 숨김에 포함합니다.
이는 원래(해킹되지 않은) 종속성으로 돌아갈 수 있도록 하는 데 도움이 됩니다. 원래 종속성을 복원하려면 해커는 해당 종속성을 Cargo.toml
파일에 숨겨야 합니다. CI가 체크섬 불일치를 감지하면 이는 해킹된 소스에서 종속성이 업데이트되었음을 의미합니다. 대신 복원하고 업데이트하고 다시 해킹해야 합니다.
작업 공간의 Cargo.toml
에 이를 추가하여 잠금을 기본 동작으로 만들 수 있습니다.
[workspace.metadata.hackerman]
lock = true
-D
, --no-dev
— 개발 종속성을 통합하지 마세요.
-h
, --help
— 도움말 정보를 인쇄합니다.
cargo-hackerman hack
이 상자가 전체 작업 공간의 일부로 또는 자체적으로 사용될 때 이 상자의 모든 종속성 기능이 동일하게 유지되도록 모든 작업 공간 구성원에 최소한의 추가 종속성 세트를 계산하고 추가합니다.
종속성이 해킹되면 변경하기 전에 이를 복원해야 합니다.
hack
명령으로 추가된 크레이트 종속성 통합 제거
사용법 : cargo hackerman
restore
CARGO_OPTS
[ TOML
]...
화물 옵션:
--manifest-path
= PATH
— Cargo.toml 파일 경로--frozen
— Cargo.lock이 필요하며 캐시가 최신 상태입니다.--locked
— Cargo.lock이 최신 상태여야 합니다.--offline
— 네트워크에 액세스하지 않고 실행-v
, --verbose
— 자세한 내용을 늘리고 여러 번 사용할 수 있습니다.사용 가능한 위치 항목:
TOML
— 전체 작업공간 대신 개별 파일을 복원합니다.사용 가능한 옵션:
-h
, --help
— 도움말 정보를 인쇄합니다. 통합이 필요한지, 체크섬이 올바른지 확인하세요.
cargo-hackerman hack --dry
와 유사하지만 종료 상태를 1로 설정하여 CI 프로세스의 일부로 사용할 수 있습니다.
사용법 : cargo hackerman
check
CARGO_OPTS
[ -D
]
화물 옵션:
--manifest-path
= PATH
— Cargo.toml 파일 경로--frozen
— Cargo.lock이 필요하며 캐시가 최신 상태입니다.--locked
— Cargo.lock이 최신 상태여야 합니다.--offline
— 네트워크에 액세스하지 않고 실행-v
, --verbose
— 자세한 내용을 늘리고 여러 번 사용할 수 있습니다.사용 가능한 옵션:
-D
, --no-dev
— 개발 종속성을 통합하지 마세요.-h
, --help
— 도움말 정보를 인쇄합니다. 파일을 복원하고 기본 병합 드라이버로 병합
사용법 : cargo hackerman
merge
BASE
LOCAL
REMOTE
RESULT
사용 가능한 옵션:
-h
, --help
— 도움말 정보를 인쇄합니다. 이를 사용하려면 ~/.gitconfig
또는 .git/config
에 다음과 같은 내용을 추가해야 합니다.
[merge "hackerman"]
name = merge restored files with hackerman
driver = cargo hackerman merge %O %A %B %P
그리고 .git/gitattributes
에 이와 같은 내용이 있습니다.
Cargo.toml merge=hackerman
일부 종속성이 존재하는 이유를 설명하십시오. 기능과 버전은 모두 선택 사항입니다.
사용법 : cargo hackerman
explain
CARGO_OPTS
[ -T
] [ -P
] [ -s
] CRATE
[ FEATURE
] [ VERSION
]
화물 옵션:
--manifest-path
= PATH
— Cargo.toml 파일 경로--frozen
— Cargo.lock이 필요하며 캐시가 최신 상태입니다.--locked
— Cargo.lock이 최신 상태여야 합니다.--offline
— 네트워크에 액세스하지 않고 실행-v
, --verbose
— 자세한 내용을 늘리고 여러 번 사용할 수 있습니다.사용 가능한 옵션:
-T
, --no-transitive-opt
— 중복 링크를 제거하지 마세요-P
, --package-nodes
— 기능 노드 대신 패키지 노드를 사용합니다.-s
, --stdout
— xdot
생성하는 대신 도트 파일을 stdout으로 인쇄합니다.-h
, --help
— 도움말 정보를 인쇄합니다.종속성이 많으면 정확히 일부 하위-하위 종속성이 포함된 이유를 파악하기 어려울 수 있습니다. hackerman explain은 대상에서 작업 공간까지 종속성 체인을 추적하여 이 문제를 해결합니다.
explain
주어진 크레이트/기능에서 시작하여 작업공간 자체에 들어가지 않고 작업공간과의 모든 교차점에 도달할 때까지 역의존성 링크를 따라갑니다.
흰색 노드는 작업 공간 구성원을 나타내고, 둥근 노드는 기능을 나타내고, 팔각형 노드는 기본 상자를 나타냅니다. 점선은 개발 전용 종속성을 나타내고 점선은 개발 및 일반 종속성을 나타내지만 서로 다른 기능을 갖습니다. 대상은 일반적으로 강조 표시됩니다. 기본적으로 해커맨은 -P
로 되돌릴 수 있는 패키지 정보 기능 노드를 확장하고 트리를 더 읽기 쉽게 유지하기 위해 전이적 종속성을 줄이려고 시도합니다. 이는 -T
로 되돌릴 수 있습니다.
상자가 여러 버전으로 존재하는 경우 관심 있는 버전을 지정할 수 있지만 선택 사항입니다.
검색할 기능을 지정할 수도 있습니다. 그렇지 않으면 해커가 모든 기능을 검색하게 됩니다.
작업공간의 모든 중복 항목을 나열합니다.
사용법 : cargo hackerman
CARGO_OPTS
dupes
.
화물 옵션:
--manifest-path
= PATH
— Cargo.toml 파일 경로--frozen
— Cargo.lock이 필요하며 캐시가 최신 상태입니다.--locked
— Cargo.lock이 최신 상태여야 합니다.--offline
— 네트워크에 액세스하지 않고 실행-v
, --verbose
— 자세한 내용을 늘리고 여러 번 사용할 수 있습니다.사용 가능한 옵션:
-h
, --help
— 도움말 정보를 인쇄합니다. 종속성으로 트리 만들기
사용법 : cargo hackerman
tree
CARGO_OPTS
[ -T
] [ -D
] [ -P
] [ -w
] [ -s
] [ CRATE
] [ FEATURE
] [ VERSION
]
화물 옵션:
--manifest-path
= PATH
— Cargo.toml 파일 경로--frozen
— Cargo.lock이 필요하며 캐시가 최신 상태입니다.--locked
— Cargo.lock이 최신 상태여야 합니다.--offline
— 네트워크에 액세스하지 않고 실행-v
, --verbose
— 자세한 내용을 늘리고 여러 번 사용할 수 있습니다.사용 가능한 옵션:
-T
, --no-transitive-opt
— 중복 링크를 제거하지 마세요-D
, --no-dev
— 개발 종속성을 포함하지 않습니다.-P
, --package-nodes
— 기능 노드 대신 패키지 노드를 사용합니다.-w
, --workspace
— 작업 공간 내에 유지-s
, --stdout
— xdot
생성하는 대신 도트 파일을 stdout으로 인쇄합니다.-h
, --help
— 도움말 정보를 인쇄합니다.예:
cargo hackerman tree rand 0.8.4
cargo hackerman tree serde_json preserve_order
상자 매니페스트, 읽어보기, 저장소 또는 문서 표시
사용법 : cargo hackerman
show
CARGO_OPTS
[ -m
| -r
| -d
| -R
] CRATE
[ VERSION
]
화물 옵션:
--manifest-path
= PATH
— Cargo.toml 파일 경로--frozen
— Cargo.lock이 필요하며 캐시가 최신 상태입니다.--locked
— Cargo.lock이 최신 상태여야 합니다.--offline
— 네트워크에 액세스하지 않고 실행-v
, --verbose
— 자세한 내용을 늘리고 여러 번 사용할 수 있습니다.사용 가능한 옵션:
-m
, --manifest
— 상자 매니페스트 표시-r
, --readme
— 상자 readme 표시-d
, --doc
— 문서 URL 열기-R
, --repository
— 저장소-h
, --help
— 도움말 정보를 인쇄합니다.예:
cargo hackerman show --repository syn