Giter Site home page Giter Site logo

cygni-talent-git-diy's Introduction

git: do it yourself

I den här övningen kommer vi att återskapa gits fundamentala funktionalitet.

läs före:

prerequisites

quickstart

# clone:a ner det här repo:t
git clone [email protected]:cygni/cygni-talent-git-diy.git
# clone:a pytt-repo:t
git clone [email protected]:mbark/pytt.git
cd pytt
# applicera patch:en som sätter koden i rätt läge
git apply ../cygni-talent-git-diy/0001-pass.patch
# installera alla dependencies
pipenv install
# aktivera ett shell med alla dependencies installerade
pipenv shell
# verifiera att pytt startar som det ska
pytt --help

mål

  • slutgiltigt: köra först create_repo.sh och sedan pytt_commit.sh och då se två commits från git log.
  • delsteg: implementera följande funktioner i ordning (alla finns i pytt.py>):
  • hash-object (som är färdigimplementerad för att ge en liten headstart);
  • cat-file;
  • update-index;
  • ls-files;
  • write-tree;
  • commit-tree;
  • update-ref.

tester

Finns ej, göre live.

api

{Tree,Commit}{,.Entry} uppfyller alla följande api:

  • unpack: packa upp data från ett git objekt och skapa klassen;
  • och pack: packa ihop objektet till data.

editor

Visual Studio Code med dess officiella Python-plugin rekommenderas.

setup

  1. Installera Python-plugin:et;
  2. Klicka cmd-shift-p (eller ctrl-shift-p för icke-mac), och välj alternativet Python: Select Interpreter;
  3. Välj den som heter Python 3.7.0 (virtualenv)
  4. Om ni vill kunna köra script med shift-enter från VSCode så lägg till denna keybinding:
{
  "key": "shift+enter",
  "command": "workbench.action.terminal.runSelectedText",
  "when":
    "editorFocus && !findInputFocussed && !replaceInputFocussed && editorLangId == 'shellscript'"
}

vanliga fel

Här har ni några vanliga fel ni kan stöta på.

pipenv shell skiter sig

Se till att du har följande i .profile eller .zshenv:

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

jag vet inte hur man skapar en klass-instans i Python

Om du vill skapa exempelvis ett nytt träd:

Tree.Entry(
    entry.name,
    entry.sha,
    mode_type=entry.mode_type,
    mode_permissions=entry.mode_permissions,
)

vad fan är self i python-metoderna?

En referens till objektet du anropar metoden på och skickas in "av sig själv".

Du anropar alltså exempelvis metoden pack i Tree på följande sätt:

instance_of_tree_object.pack()

men vad är då cls i python-metoderna???

En referens till klassen du anropar den statiska klassmetoden på. Det skickas också in "av sig själv".

Du anropar alltså metoden unpack i Tree på följande sätt:

Tree.unpack(data)

TypeError: %b requires a bytes-like object, or an object that implements __bytes__, not 'str' (eller något liknande)

Python skiljer på byte-strängar (bytes) som är råa och inte har en encoding och strängar (str) som har en encoding. Ni måste arbeta med en sort åt gången, antingen bytes eller str.

😭 VA!???

  • bytes -> str: some_bytes.decode() (antar UTF-8 som encoding, vilket ju bör vara rimligt);
  • str -> bytes some_str.encode();
  • bytes-sträng: sätt ett b framför ba: b"our bytes string"
  • öppna en fil och läs som str: file.open(our_file, 'r');
  • öppna fil och läs som bytes: file.open(our_file 'rb');

Tips:

  • om det är text ni håller på med är det ju oftast str;
  • om det är någon form av data som kan vara lite vad som helst är det oftast bytes.

vi fattar inte alls vad vi ska göra!??!?!?

Diskutera vad funktionen har för syfte "i det stora hela", dvs vad ska ni åstadkomma.

vi får något skitkonstigt Python-fel som inte står ovan

Be om hjälp dirr.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.