Potential bug when handling relative paths.
Nessuno ha ancora preso questa issue.
- Lingua principale
- C
- Stelle
- 10.6k
- Fork
- 2.7k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Reproduction steps
Compile the following code (gcc example.c -lgit2), and run it against an object directory.
If we supply an absolute path, the example works fine.
./a.out /home/elliott/repo
If a relative path is provided, the example failed. The git_odb_write_multi_pack_index complains path issues.
./a.out [repo]
A sample repo can be downloaded here. repo.zip
// This simple example just opens a repo odb and writes out a multi-index pack.
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <git2.h>
struct Context {
git_odb *db;
git_odb_backend *backend;
git_indexer *idxer;
};
int git_odb_foreach_cb_1(const git_oid *id, void *payload) {
printf("%s\n", git_oid_tostr_s(id));
return 0;
}
int main(int argc, char **argv) {
struct Context c;
if (argc != 2) {
fprintf(stderr, "Usage: bug_example object_dir\n");
return -1;
}
const char* obj_dir = argv[1];
git_libgit2_init();
if (git_odb_new(&c.db)) {
fprintf(stderr, "Unable to open db\n");
return -1;
}
if (git_odb_backend_pack(&c.backend, obj_dir)) {
fprintf(stderr, "Unable to open backend\n");
return -1;
}
if (git_odb_add_backend(c.db, c.backend, 1)) {
fprintf(stderr, "Unable to add backend\n");
return -1;
}
if (git_odb_foreach(c.db, git_odb_foreach_cb_1, &c)) {
fprintf(stderr, "Unable to walk repo\n");
return -1;
}
if (git_odb_write_multi_pack_index(c.db)) {
fprintf(stderr, "Could not open repository: %s\n", git_error_last()->message);
return -1;
}
return 0;
}
Expected behavior
Works on relative path and absolute path.
Actual behavior
If we supply an absolute path, the example works fine.
If a relative path is provided, the example failed. The git_odb_write_multi_pack_index complains path issues.
Version of libgit2 (release number or SHA1)
Tested on 1.5 and 1.4
Operating system(s) tested
Ubuntu 22.04
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia compilando l’esempio C fornito con libgit2 1.5 o 1.4 ed eseguilo con il repository di esempio collegato, confrontando i percorsi assoluti e relativi della directory degli oggetti. Traccia le chiamate a git_odb_backend_pack e git_odb_write_multi_pack_index per identificare dove il percorso relativo fallisce; il lavoro è completato quando entrambe le forme di invocazione funzionano senza l’errore del percorso.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c, git
- Ambito
- database
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100