{"thread":{"id":"27848","subject":"[GSoC 11] libgit2: midterm report","startedAt":"2011-07-19T00:07:03Z","lastAt":"2011-07-19T00:07:03Z","messageCount":1,"participants":["Carlos Martín Nieto"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"171633","messageId":"1311034023.4147.949.camel@centaur.lab.cmartin.tk","threadId":"27848","inReplyTo":null,"subject":"[GSoC 11] libgit2: midterm report","fromName":"Carlos Martín Nieto","fromEmail":"carlos@cmartin.tk","sentAt":"2011-07-19T00:07:03Z","receivedAt":"2011-07-19T00:07:03Z","isPatch":false,"sender":{"key":"carlos@cmartin.tk","avatar":"https://gravatar.com/avatar/956bfe8371004f2960febf266a6af789f60cdc01fbae48bb151ad4c9b532c3a2?d=mp&s=160"},"body":"Hello everyone,\n\nAs it's the GSoC midterm and I'm taking a rest from coding (my exams are\nin the next few days) I'm taking this opportunity to write up a more\ndetailed report on what has been happening on the libgit2 network front.\nAll the code is available from my 'fork' on github.\n\nThe more useful working code has been merged into mainline, and you can\nget a list of references on the remote. If you want to filter which\nreferences you want to see, you can do that as well (with some manual\nwork). I had hoped that fetching and/or pack indexing would be working\nby now, but sadly the university got in the way. At any rate, here's a\nlist of what's working/implemented:\n\n   _Refspec_\n\nI believe all the important stuff has been implemented. You can get one\nfrom a remote and you can see if a string matches what it describes. You\ncan also transform  a string/path from the source to the destination\nform (this probably has a different name in git.git). The transformation\ncode assumes that a '*' in the destination implies that there is a '*'\nat the end of the source name as well. This might need to be 'hardened'.\n\n   _Remotes_\n\nYou can parse its information from the configuration file (the push and\nfetch refspecs will be parsed as well) and an appropriate transport (see\nbelow) will be chosen based on the URL prefix. Right now there is a\nstatic list, but plug-ins could be supported without much effort if\nsomebody can come up with an use-case. It is through these transports\nthat everything is done through the network (or simulating the network,\nas in the local filesystem \"network\" transport).\n\n\n   _Transports_\n\nThis is where most of the work actually happens. Each transport\nregisters its callbacks in a structure and does its work transparently.\nThe data structures are still in flux, as I haven't yet found the best\nway to avoid duplicating the information in several places, and the\nwant/have/need code is really still in it infancy. The idea is that the\nobject list you get when you connect can be used to mark which commits\nyou want to receive or send. Right now only the local filesystem and\ngit/tcp are implemented; and the only working operation is\n'git-ls-remote'.\n\n   _Sliding memory maps, packfile reading and the indexer_\n\nOr whatever you want to call them; I believe it's mmfile in git. This\ncode and the packfile reading code live in the \"pack ODB backend\" so I'm\nmaking it somewhat more generic so I can use it without an ODB backend.\nOnce that code is decoupled (which is a good change on its own), writing\nand indexer shouldn't be too hard.\n\n-----\n\nSo this is where I am now. I'm a bit behind according to the original\nschedule but still on track to finish on time. It's been interesting and\nfun, sometimes a bit frustrating. Thanks to all the people who have\nhelped me thus far.\n\nCheers,\n   cmn\n\n\n"}]}