2014-05-15 1 views
0

Android 용 Libgit2 (v0.20.0) (대상 SDK 버전 18, Cyanogenmod 10.1.2를 실행하는 루팅 된 장치에서 디버깅, Android 4.2.2) 및 Libgit2의 버전 번호를 가져 오는 것과 같은 간단한 기능이 JNI를 통해 잘 작동합니다. 나는 git_clone 기능을 사용할 때 그것은 개체/정보 폴더를 만든 후 바로 중지하고이 오류를 반환 : 나는 응용 프로그램에게 WRITE_EXTERNAL_STORAGE 권한을 준안드로이드에서 실행되는 Libgit2가 복제 작업을 수행 할 수 없음 - "권한 설정 실패"오류를 반환합니다.

Error -1 cloning repository - Failed to set permissions on '/storage/sdcard0/it/ptt/.git/objects/info': Operation not permitted 

을하지만, 난 여전히 소유자를 제외 할 수 chmod를하지를 추측 파일. 나는 정보 폴더의 사용 권한 모드를 체크 아웃 ADB 쉘을 사용할 때 내가 얻을 :

d---rwxr-x system sdcard_rw   2014-05-15 09:31 info 

그리고 pwd.h 기능을 사용하여

나는 사용자 이름을 얻을 C 코드 (즉, 호출 git_clone가) u0_a92 수 아래입니다. 내가 안드로이드 관련 문제라고 생각하면 어떻게해야할까요? Libgit2가 p_chmod으로 전화하는 것을 막을 수있는 간단한 방법이 있습니까? 아니면 그렇게 할 권한을 부여 할 수 있습니까?

+1

* 충돌 * 또는 오류가 발생 했습니까? 충돌이 발생하면 libgit2에서 매우 나쁜 버그가 발생합니다. 오류가 발생하면 안드로이드의 특질입니다. –

+0

오, 죄송합니다. 충돌하지 말았어야합니다. 실제로 충돌하지는 않으며 객체/정보 폴더가 생성 된 직후 저장소 복제가 중지되고 오류가 반환됩니다. 지금 제목을 수정했습니다 – torno

+1

sqlite가 설정에 실패한 것과 유사한 보고서가 있습니다. 안드로이드가 당신을 그렇게시키지 못하는 것처럼 보입니다. 더러운 해결 방법으로'p_chmod()'를 no-op로 정의하거나 안드로이드 용으로 빌드 할 때 오류를 무시할 수 있습니다. 안드로이드 일 수도 있고 FAT 일 수도 있고 아니면 ... –

답변

0

결국 오류를 전달하기 위해 항상 true를 반환하는 메서드로 p_chmod을 정의했습니다.

LIBGIT2_POSIX_PATH="$LIBGIT2_SOURCE_PATH/src/posix.h" 
LIBGIT2_POSIX_BACKUP_PATH="$LIBGIT2_SOURCE_PATH/src/posix_original.h" 
printf "#include \"always_success.h\"\nint always_success() { return 0; }" > "$LIBGIT2_SOURCE_PATH/src/always_success.c" 
printf "int always_success();" > "$LIBGIT2_SOURCE_PATH/src/always_success.h" 
cp $LIBGIT2_POSIX_PATH "$LIBGIT2_POSIX_BACKUP_PATH" 
sed -i "s/^#define\sp_chmod(p, m).*$/#include \"always_success.h\"\n#define p_chmod(p, m) always_success()\nextern int always_success();\n/" $LIBGIT2_POSIX_PATH 

# run the build process with cmake ... 

# restore chmod manipulated source header 
mv $LIBGIT2_POSIX_BACKUP_PATH $LIBGIT2_POSIX_PATH 

이이 문제를 해결하기 위해 깨끗한 방법은 아마도하지만 적어도 지금은 그나마 : 나는 libgit2 구축하는 데 사용하는 bash는 스크립트에서 나는 안드로이드에 대한 구축 후 수정되지 않은 상태에서 소스 파일을 잎에 다음 줄을 삽입 더 이상 그 오류가 발생합니다. 그의 도움으로 카를로스에게 감사드립니다!

UPDATE 내가으로 저장소를 복제하는 것을 시도하고있는 SDCARD가 this 포럼 스레드에 따라 유닉스 스타일의 권한을 지원하지 않습니다 VFAT 파일 시스템을 사용하는 내가 볼 수 adb shell mount | grep sdcard을 실행합니다.

관련 문제