মূল লেখায় যান

The pot command reference

beansc pot command কাজ করে project-এর dependency আর beans.lock নিয়ে। এর পাঁচটা subcommand আছে।

beansc pot init <module-name>
beansc pot add <dependency> [ref]
beansc pot add --system <pkg-config-name>
beansc pot tidy
beansc pot remove <dependency>
beansc pot remove --system <pkg-config-name>
beansc pot update [dependency]
beansc pot update --system <pkg-config-name>

বর্তমান directory-তে নতুন beans.pot বানায়:

Terminal window
beansc pot init shop

ফাইলটা হবে:

module shop

Module name ছোট হাতের অক্ষরে dot দিয়ে ভাগ করা হয়, যেমন shop বা acme.http_client। আগে থেকে beans.pot থাকলে command সেটা overwrite করে না। এটা শুধু manifest বানায়; main.b বা library source আলাদা করে যোগ করতে হবে।

beans.pot-এ Git dependency যোগ করে, সেটা resolve করে, আর beans.lock লেখে।

Terminal window
beansc pot add acme/http v1.2

owner/repo লিখলে সেটা github.com/owner/repo ধরা হয়। পুরো host path, HTTPS URL, বা SSH URL-ও paste করা যায়। ref না দিলে HEAD ধরা হয়।

ref tag, branch, বা commit hash হতে পারে:

Terminal window
beansc pot add acme/http main
beansc pot add acme/http feature/new-api
beansc pot add acme/http 4f82c9a7d13e

এখানে কোনো package registry search হয় না। acme/http সবসময় github.com/acme/http, আর Git https://github.com/acme/http.git fetch করে।

private repo-র জন্যও একই command। Beans credential save করে না; Git তার স্বাভাবিক credential helper ব্যবহার করে। GitHub-এ SSH ব্যবহার করতে চাইলে একবার এটা চালানো যায়:

Terminal window
git config --global url."git@github.com:".insteadOf "https://github.com/"

beans.pot বা dependency argument-এ access token লিখবেন না।

আগে থেকে install করা C library-র pkg-config file থাকলে --system ব্যবহার করুন:

Terminal window
beansc pot add --system sqlite3

Beans pkg-config থেকে library search path আর library name নিয়ে beans.pot-এ চিহ্ন দেওয়া link block লেখে:

# beansc:system sqlite3 begin
link all library "sqlite3"
# beansc:system sqlite3 end

Library default linker path-এর বাইরে থাকলে search row-ও যোগ হয়। Library-টা system package manager-এরই দায়িত্বে থাকে। Beans সেটা download করে না, আর beans.lock-এও যোগ করে না।

কোড যে dependency গুলো সত্যিই ব্যবহার করে সেগুলো resolve করে, আর beans.lock লেখে।

Terminal window
beansc pot tidy

import বদলানোর পর এটা চালান, যাতে lock-টা কোডের সাথে মিলে যায়।

beans.pot থেকে Git dependency মুছে দেয়, তারপর beans.lock tidy করে।

Terminal window
beansc pot remove acme/http

আগে ওই dependency-র import মুছুন। import থেকে গেলে command fail করবে আর beans.pot বদলাবে না।

generated system-library block মুছতে একই flag ব্যবহার করুন:

Terminal window
beansc pot remove --system sqlite3

locked dependency গুলোকে refresh করে তাদের ref যতটুকু অনুমতি দেয় ততটুকুর মধ্যে সবচেয়ে নতুন commit-এ নিয়ে যায়, আর lock আবার লেখে।

Terminal window
beansc pot update

শুধু একটা dependency update করতে চাইলে তার নাম বলে দিন:

Terminal window
beansc pot update github.com/acme/http

dependency-র নাম pot add-এর মতো short name, host path, বা Git URL হতে পারে।

system library-র generated block-টা বর্তমান pkg-config metadata দিয়ে refresh করতে চালান:

Terminal window
beansc pot update --system sqlite3

এই দুইটা flag কিন্তু pot-এর subcommand নয়। এগুলো খাটে check, run, আর build-এ (আর এগুলোর নিচের loading path-এ), যেখানে এরা ঠিক করে lock আর network-কে কতটা কড়াভাবে ধরা হবে:

  • --locked: হুবহু beans.lock entry দরকার; lock না থাকলে, পুরানো হলে, বা বদলে গেলে সেটা বাতিল করে দেয়।
  • --offline: dependency-র network access বন্ধ; শুধু একটা পরিষ্কার cached tree বোঝায়, যার hash locked hash-এর সাথে মেলে।

পুরো বিস্তারিত আছে Reproducible build-এ। সাথে দেখুন Dependencies আর lock file আর beansc command